2017-05-31 113 views
0

两个非常相似的路由设置真的很混乱。导轨路由成员和非成员嵌套

resources :authors do 
    resources :books 
end 

resources :authors do 
    member do 
    resources :books 
    end 
end 

大家都知道了,Rails会生成以下路线:

writer_book GET /writers/:writer_id/books/:id(.:format) books#show 

book   GET /writers/:id/books/:id(.:format)  books#show 

这是怎么成员选项有用吗? 一个人可以不使用成员选项,并在books_controller中设置params [:writer_id]并完成它的权利? 这会在应用程序变大时产生不良影响吗?后果是什么?

回答

1

membercollection方法意味着额外的RESTful行为添加到它们不用于筑巢资源

# bad 
resources :writers do 
    member do 
    resources :books 
    end 
end 

# good 
resources :writers do 
    resources :books 
end 

什么后果资源

resources :writers do 
    member do 
    post :favorite 
    end 

    collection do 
    get :unpublished 
    end 
end 

使用成员在这里会导致路由

GET /writers/:id/books/:id(.:format)  

这意味着,id参数是ambigous!它可以是书或作者的ID!不好!不使用member会给我们params[:writer_id],我们可以用它来获取父记录。

GET /writers/:writer_id/books/:id(.:format) books#show 

参见: