Rails 路由到嵌套控制器

问题描述

我有一个用于创建类别的控制器,我想再有一个嵌套控制器来创建类别的语言版本。我想避免使用 new_language,edit_language,... 之类的方法并对其进行路由,我想以最好的 Rails 方式做到这一点。但我是 Rails 的新手(来自 padrino 和 Sinatra),我对路由有点迷茫。

我有我的类别控制器

module Admin
  class CategoriesController < ApplicationController
    before_action :authenticate_user!
    before_action :find_category,only: [:show,:edit,:update]

    layout 'admin'

    def index
      @categories = Category.all
    end

    ..... all the others CRUD methods ....

  end
end

还有另一个控制器。

module Admin
  class CategoriesLanguageController < ApplicationController
    before_action :authenticate_user!
    before_action :find_category,:update]

    def new
      @category = Category.find(params[:category].to_i)
    end

    .... all the others CRUD methods ...

  end
end

和我的路由配置。

Rails.application.routes.draw do
  devise_for :users
  resources :users
  namespace :admin do
    get '/' => 'dashboard#index'
    resources :dashboard,only: [:index]
    resources :categories do
      collection do
        get :publish_category
        #get :new_lang
        #post :create_lang
        #get :edit
        #post :update
        #get :destroy
      end
      resources :language,only: [:new,:create,:edit]
    end
  end

  # For details on the DSL available within this file,see https://guides.rubyonrails.org/routing.html
  root to: "homepage#index"

  namespace :api,defaults: { format: 'json' } do
    namespace :v1 do
      resources :categories,only: [:index]
    end
  end


end

我希望在第二个控制器下有方法 new_lang and create_lang名称new,create,...

生成这个

                                                admin GET    /admin(.:format)                                                                                  admin/dashboard#index
                   admin_dashboard_index GET    /admin/dashboard(.:format)                                                                        admin/dashboard#index
       publish_category_admin_categories GET    /admin/categories/publish_category(.:format)                                                      admin/categories#publish_category
           admin_category_language_index POST   /admin/categories/:category_id/language(.:format)                                                 admin/language#create
             new_admin_category_language GET    /admin/categories/:category_id/language/new(.:format)                                             admin/language#new
            edit_admin_category_language GET    /admin/categories/:category_id/language/:id/edit(.:format)                                        admin/language#edit
                        admin_categories GET    /admin/categories(.:format)                                                                       admin/categories#index
                                         POST   /admin/categories(.:format)                                                                       admin/categories#create
                      new_admin_category GET    /admin/categories/new(.:format)                                                                   admin/categories#new
                     edit_admin_category GET    /admin/categories/:id/edit(.:format)                                                              admin/categories#edit
                          admin_category GET    /admin/categories/:id(.:format)                                                                   admin/categories#show
                                         PATCH  /admin/categories/:id(.:format)                                                                   admin/categories#update
                                         PUT    /admin/categories/:id(.:format)                                                                   admin/categories#update
                                         DELETE /admin/categories/:id(.:format)                                                                   admin/categories#destroy

但它不起作用。

ActionController::UrlGenerationError in Admin::Categories#index

错误是这条路线:

<td><%= link_to cat.internal_name,edit_admin_category_language_path(id: cat) %></td>

而且我不知道如何在另一个控制器中创建这些操作并使用 url 助手。

或者这不是最好的方法

请问有什么建议吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...