Rails 4 — маршрутизация с использованием проблем

Я пытаюсь понять, как использовать проблемы в моем файле маршрутов.

У меня есть модели под названием User, Project и Eoi.

Ассоциации таковы:

Пользователь

has_many :eois

Проект

has_many :eois

Эой

belongs_to :user
belongs_to :project

Я пытаюсь создать систему для отображения eois, отправленных в проект, чтобы они были видны только пользователю, создавшему проект.

Отдельно я хочу показать каждому пользователю все eos, которые сделал этот пользователь (независимо от того, на каком проекте они сделаны).

Я думаю, что мне нужны вложенные маршруты для первого сценария, а затем я также хочу, чтобы маршруты eoi не были вложенными для второго сценария.

В моих маршрутах.рб

У меня есть:

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

Я также хочу иметь:

resources :eois

Как я могу заставить это работать? Я не могу понять примеры в этом http://api.rubyonrails.org/classes/ActionDispatch/Routing/Mapper/Concerns.html

Я не понимаю, похвальна ли в примере модель или это что-то, что мне нужно написать, чтобы иметь возможность иметь маршруты в двух местах в файле route.rb.

Моя следующая попытка - попытаться скопировать суть примера в приведенной выше ссылке, у меня есть

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

resources :projects do
    concerns :eoiable
  end

Я не уверен, что мне нужно где-то дать определение, чтобы это заработало.


person Mel    schedule 02.09.2016    source источник


Ответы (1)


Проблемы с маршрутом нужны только тогда, когда вы хотите высушить свои маршруты. Пока у вас есть только одно дублирование маршрута (eoi), поэтому... использование проблемы здесь излишне.

То, что вы на самом деле хотите сделать, это иметь 2 контроллера eoi, один будет отвечать за предоставление всех eoi, второй - только за те, которые находятся внутри проекта.

Для лучшей читабельности я бы распределил их по именам — один 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 контроллера.

person shlajin    schedule 02.09.2016