匹配第二级(嵌套)资源索引操作的最佳实践

时间:2013-05-17 07:33:28

标签: ruby-on-rails ruby

(我正在从codeschool进行在线课程练习,从第1部分开始使用rails app)

这是我的routes.rb

resources :destinations, only: :index 

resources :trips do
  resources :destinations
end

并且rake routes结果将这两条路由转到相同的操作:

           Prefix Verb   URI Pattern                             Controller#Action
     destinations GET    /destinations(.:format)                 destinations#index
trip_destinations GET    /trips/:trip_id/destinations(.:format)  destinations#index

我希望将trip_destinationstrip#show匹配,即重定向到/trips/:id,我有一些解决方案,例如routes.rb中的硬编码或{{1}中的重定向}}。哪一个更好?有没有最佳实践来完成这项任务?

1 个答案:

答案 0 :(得分:1)

resources :trips do
  resources :destinations do
    member do
      get 'index' => 'trips#show'
    end
  end
end

这对您有用,但它基于错误的设计,因为响应与请求不匹配。换句话说,这是一条糟糕的路线。旅行的目的地索引资源应该使用旅行的目的地索引,而不是旅行对象本身。

/trips/:id/destinations路径不应重定向或呈现/trips/:id。除非您的应用程序可以使用适当的资源进行响应,否则不应该首先指向trips/:id/destinations的链接。

很容易被花哨的路线和网址呈现带走。确保你的路线有意义。它将在未来为您节省大量麻烦。