2017-05-31 44 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 

參見: