【问题标题】:What's the "Rails way" to route a "diff" between two instances of the same model?在同一模型的两个实例之间路由“差异”的“Rails 方式”是什么?
【发布时间】:2017-09-08 10:52:16
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

    能想到的“最简洁”的方式是:

    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 路由后,您将看到生成:

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

    【讨论】:

    • 谢谢 - 我已经采用这种方法,所以它不需要另一个控制器。
    【解决方案2】:

    我觉得你说的都不错,

    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 中创建差异路由。

    【讨论】:

    • 谢谢 - 我正在考虑这个并放弃了,因为我必须有一个 DiffsController,但也许这是正确的路径。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-17
    相关资源
    最近更新 更多