Rails嵌套资源 - 设置参数:问题

时间:2016-11-18 10:43:33

标签: ruby-on-rails routes ruby-on-rails-5 nested-routes

我声明了以下路线:

  resources :accounts, param: :account_id do
     resources :instructions, param: :instruction_id  do
       resources :messages, param: :message_id
     end
  end

因此帐户,说明,消息是我拥有的3种型号。这给了我路线:

    account_instruction_messages GET    /accounts/:account_account_id/instructions/:instruction_instruction_id/messages(.:format)                  messages#index
                                 POST   /accounts/:account_account_id/instructions/:instruction_instruction_id/messages(.:format)                  messages#create
 new_account_instruction_message GET    /accounts/:account_account_id/instructions/:instruction_instruction_id/messages/new(.:format)              messages#new
edit_account_instruction_message GET    /accounts/:account_account_id/instructions/:instruction_instruction_id/messages/:message_id/edit(.:format) messages#edit
     account_instruction_message GET    /accounts/:account_account_id/instructions/:instruction_instruction_id/messages/:message_id(.:format)      messages#show
                                 PATCH  /accounts/:account_account_id/instructions/:instruction_instruction_id/messages/:message_id(.:format)      messages#update
                                 PUT    /accounts/:account_account_id/instructions/:instruction_instruction_id/messages/:message_id(.:format)      messages#update
                                 DELETE /accounts/:account_account_id/instructions/:instruction_instruction_id/messages/:message_id(.:format)      messages#destroy
            account_instructions GET    /accounts/:account_account_id/instructions(.:format)                                                       instructions#index
                                 POST   /accounts/:account_account_id/instructions(.:format)                                                       instructions#create
         new_account_instruction GET    /accounts/:account_account_id/instructions/new(.:format)                                                   instructions#new
        edit_account_instruction GET    /accounts/:account_account_id/instructions/:instruction_id/edit(.:format)                                  instructions#edit
             account_instruction GET    /accounts/:account_account_id/instructions/:instruction_id(.:format)                                       instructions#show
                                 PATCH  /accounts/:account_account_id/instructions/:instruction_id(.:format)                                       instructions#update
                                 PUT    /accounts/:account_account_id/instructions/:instruction_id(.:format)                                       instructions#update
                                 DELETE /accounts/:account_account_id/instructions/:instruction_id(.:format)                                       instructions#destroy

我看起来不对,我在期待

/ accounts /:account_id / instructions /:instruction_id等...?

有人可以告诉我做错了吗?

1 个答案:

答案 0 :(得分:2)

你可以用下一个方式来做:

resources :accounts do
 resources :instructions  do
   resources :messages, param: :message_id
 end
end

这将使你成为下一条路线:

    account_instruction_messages GET       /accounts/:account_id/instructions/:instruction_id/messages(.:format)                  messages#index
                                 POST      /accounts/:account_id/instructions/:instruction_id/messages(.:format)                  messages#create
 new_account_instruction_message GET       /accounts/:account_id/instructions/:instruction_id/messages/new(.:format)              messages#new
edit_account_instruction_message GET       /accounts/:account_id/instructions/:instruction_id/messages/:message_id/edit(.:format) messages#edit
     account_instruction_message GET       /accounts/:account_id/instructions/:instruction_id/messages/:message_id(.:format)      messages#show
                                 PATCH     /accounts/:account_id/instructions/:instruction_id/messages/:message_id(.:format)      messages#update
                                 PUT       /accounts/:account_id/instructions/:instruction_id/messages/:message_id(.:format)      messages#update
                                 DELETE    /accounts/:account_id/instructions/:instruction_id/messages/:message_id(.:format)      messages#destroy
            account_instructions GET       /accounts/:account_id/instructions(.:format)                                           instructions#index
                                 POST      /accounts/:account_id/instructions(.:format)                                           instructions#create
         new_account_instruction GET       /accounts/:account_id/instructions/new(.:format)                                       instructions#new
        edit_account_instruction GET       /accounts/:account_id/instructions/:id/edit(.:format)                                  instructions#edit
             account_instruction GET       /accounts/:account_id/instructions/:id(.:format)                                       instructions#show
                                 PATCH     /accounts/:account_id/instructions/:id(.:format)                                       instructions#update
                                 PUT       /accounts/:account_id/instructions/:id(.:format)                                       instructions#update
                                 DELETE    /accounts/:account_id/instructions/:id(.:format)                                       instructions#destroy
                        accounts GET       /accounts(.:format)                                                                    accounts#index
                                 POST      /accounts(.:format)                                                                    accounts#create
                     new_account GET       /accounts/new(.:format)                                                                accounts#new
                    edit_account GET       /accounts/:id/edit(.:format)                                                           accounts#edit
                         account GET       /accounts/:id(.:format)                                                                accounts#show
                                 PATCH     /accounts/:id(.:format)                                                                accounts#update
                                 PUT       /accounts/:id(.:format)                                                                accounts#update
                                 DELETE    /accounts/:id(.:format)                                                                accounts#destroy

更新

但如果你需要所有相同的参数,你可以这样做:

resources :accounts, only: [] do
 resources :instructions, only: []  do
   resources :messages, param: :message_id
 end
end
resources :accounts, param: :account_id
resources :instructions, param: :instruction_id

这将返回:

    account_instruction_messages GET       /accounts/:account_id/instructions/:instruction_id/messages(.:format)                  messages#index
                                 POST      /accounts/:account_id/instructions/:instruction_id/messages(.:format)                  messages#create
 new_account_instruction_message GET       /accounts/:account_id/instructions/:instruction_id/messages/new(.:format)              messages#new
edit_account_instruction_message GET       /accounts/:account_id/instructions/:instruction_id/messages/:message_id/edit(.:format) messages#edit
     account_instruction_message GET       /accounts/:account_id/instructions/:instruction_id/messages/:message_id(.:format)      messages#show
                                 PATCH     /accounts/:account_id/instructions/:instruction_id/messages/:message_id(.:format)      messages#update
                                 PUT       /accounts/:account_id/instructions/:instruction_id/messages/:message_id(.:format)      messages#update
                                 DELETE    /accounts/:account_id/instructions/:instruction_id/messages/:message_id(.:format)      messages#destroy
                        accounts GET       /accounts(.:format)                                                                    accounts#index
                                 POST      /accounts(.:format)                                                                    accounts#create
                     new_account GET       /accounts/new(.:format)                                                                accounts#new
                    edit_account GET       /accounts/:accounts_id/edit(.:format)                                                  accounts#edit
                         account GET       /accounts/:accounts_id(.:format)                                                       accounts#show
                                 PATCH     /accounts/:accounts_id(.:format)                                                       accounts#update
                                 PUT       /accounts/:accounts_id(.:format)                                                       accounts#update
                                 DELETE    /accounts/:accounts_id(.:format)                                                       accounts#destroy
....... and so on