【问题标题】:Rails 4 - routing using concernsRails 4 - 使用关注点进行路由
【发布时间】:2016-09-02 02:29:10
【问题描述】:

我正在尝试弄清楚如何在我的路由文件中使用关注点。

我有名为 User、Project 和 Eoi 的模型。

这些关联是:

用户

has_many :eois

项目

has_many :eois

Eoi

belongs_to :user
belongs_to :project

我正在尝试制作一个系统来显示已在项目中提交的 eois,以便它们仅对创建该项目的用户可见。

另外,我想向每个用户展示该用户制作的所有 eois(无论他们是在哪个项目上制作的)。

我想我想要第一个场景的嵌套路由,然后我还想要第二个场景不嵌套的 eoi 路由。

在我的 routes.rb 中

我有:

resources :projects do
    # concerns: :eois, 
    member do
    resources :eois
  end

我也想拥有:

resources :eois

我怎样才能做到这一点?我无法理解http://api.rubyonrails.org/classes/ActionDispatch/Routing/Mapper/Concerns.html中的示例

我不明白示例中值得称赞的是模型还是我需要编写的东西才能在 routes.rb 文件中的两个位置拥有路由。

我的下一个尝试是尝试复制上面链接中示例的要点,我有

resources :eois#, only: [:index]
  concern :eoiable do
    resources :eois
  end

resources :projects do
    concerns :eoiable
  end

我不确定是否需要在某处定义才能使其正常工作。

【问题讨论】:

    标签: ruby-on-rails ruby routes nested-routes activesupport-concern


    【解决方案1】:

    仅当您想要 DRY 路线时才需要路线问题。到目前为止,您只有一个路由重复 (eoi),所以......在这里使用关注点是多余的。

    您真正想要做的是拥有 2 个eoi 控制器,其中一个将负责提供所有eois,仅次于项目内部的那些。

    为了更好的可读性,我将它们命名为 - 在 projects 文件夹中放置一个 eois_controller.rb 并将其命名为 Projects::EoisController,第二个 - 作为顶级控制器,命名为 EoisController。路线看起来像这样:

    resources :eois # will map to EoisController
    resources :projects do
      scope module: :projects do
        resouces :eois # will map to Projects::EoisController
      end
    end
    

    当然,您可能还想在之后干燥这 2 个控制器。

    【讨论】:

      猜你喜欢
      • 2013-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多