在同一模型的两个实例之间路由 "diff" 的 "Rails way" 是什么?

What's the "Rails way" to route a "diff" between two instances of the same model?

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

我有一个模型 PersonalityReport 并且在路线中我有 resources :personality_reports.

一项新功能是在两个报告之间提供 "diff",我正在尝试找出最 "guessable" 的方式在路线中对此进行建模。

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

能想到的'neatest'方式是:

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

显然 to: 是你的控制器#action,而 as: 是你的路线名称。在 运行 rake routes 之后你会看到生成:

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

我觉得你说的都不错,

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

所以,像下面这样的路线,

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

注意:如果你想将它作为单一资源,你也可以在单数资源中制作差异路由:diff