Rails 4 - 路由使用问题

Rails 4 - routing using concerns

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

我有名为 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 文件的两个地方有路由。

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

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

resources :projects do
    concerns :eoiable
  end

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

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

你真正想要做的是拥有 2 个 eoi 控制器,一个将负责提供所有 eois,第二个仅负责提供项目内部的控制器。

为了更好的可读性,我给它们命名空间——将一个 eois_controller.rb 放在 projects 文件夹中并将其命名为 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 个控制器。