Rails 4 - 使用关注点进行路由

时间:2016-09-02 02:29:11

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

我正在尝试弄清楚如何在路线文件中使用问题。

我有名为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

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

1 个答案:

答案 0 :(得分:0)

只有在您想要干燥路线时才需要路线问题。到目前为止,你只有一个路由重复(eoi)所以......使用一个问题在这里是一种过度杀伤。

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

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

EoisController

当然,你可能想要在之后干掉这两个控制器。