什么是在相同模型的两个实例之间路由“差异”的“Rails方式”?

时间:2017-09-08 10:52:17

标签: ruby-on-rails routing ruby-on-rails-5 rails-routing

我正在构建一个"Brand personality" tool,根据您在社交媒体上分享的文字为您提供报告。

我有一个模型PersonalityReport,在路线中我有resources :personality_reports

一个新功能是在两个报告之间提供一个“差异”,我正在尝试找出最准确的“猜测”方式来在路线中对此进行建模。

理想情况下,我希望GET /personality_reports/:personality_report_id/diff/:id或类似的东西,虽然我可以简单地将其作为GET路由放入路由中,是否有更多Railsy方法使用resources指定路由/ collections样式,以便我的routes.rb文件更容易理解?

2 个答案:

答案 0 :(得分:1)

“最好的”方式可以想到:

resources :personality_reports, param: 'personality_report' do
  member do
    get 'diff/:id', to: 'personality_reports#action', as: 'diff_route'
  end
end

显然是:你的控制器是#action,as:是你路线的名字。运行rake路线后,您会看到这会生成:

 diff_route_personality_report GET   /personality_reports/:personality_report_id/diff/:id(.:format)   personality_reports#action

答案 1 :(得分:1)

我认为无论你提到的是什么都足够好,

resources : personality_reports do
  resources :diffs, only: [:show]
end

所以,下面的路线,

personality_report_diff GET    /personality_reports/:personality_report_id/diffs/:id(.:format) diffs#show

注意:如果你想把它作为单一资源,你也可以用奇异的 resource:diff 制作差异路径。