Rails 3 нескольких вложенных маршрутов в одном контроллере - PullRequest
1 голос
/ 01 апреля 2011

У меня есть два вложенных ресурса, которые оба используют родительский контроллер.Как я могу изменить имена параметров, чтобы вместо params[:parent_id] и params[:id] я получил params[:parent_id] и params[:child_id]?В противном случае нет никакого способа определить, с каким ребенком я имею дело.

На данный момент я картирую каждый отдельный дочерний маршрут match 'child/:child_id' => 'parent#show', но это нарушает почти все правила СУХОГО, поскольку у меня есть около 5 таких маршрутов(и многое другое).

Вот пример моих маршрутов:

resources :parent do
  resources :child1, :controller => :parent
  resources :child2, :controller => :parent
end

Вот что я хотел бы сделать

resources :parent do
  resources :child1, :controller => :parent, :key => :child1_id
  resources :child2, :controller => :parent, :key => :child2_id
end

Обновление

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

Этот результат будет выглядеть примерно так:

resources :child1 do
  resources :parent
end

resources :child2 do
  resources :parent
end

Ответы [ 2 ]

2 голосов
/ 10 апреля 2012

Кажется странным делать родителя вложенным ресурсом child.Если вы действительно хотите использовать родительский контроллер (но я не уверен, что это лучший способ), один из подходов состоит в том, чтобы сохранить исходные маршруты, которые кажутся более естественными:

resources :parent do
  resources :child1, :controller => :parent
  resources :child2, :controller => :parent
end

и, в вашемконтроллер, используйте request.path, чтобы различать его происхождение:

class ParentsController
  before_each :extract_child

  # use @child to find out which child it is...

private
  def extract_child
    request.path =~ /(child\d*)/
    @child = $1
  end
end

Но, честно говоря, я бы спросил, почему не помещают логику управления в ChildsController и не воспринимаем ее как обычный вложенный в Rails ресурс

0 голосов
/ 01 апреля 2011

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

Этот результат будет выглядеть примерно так:

resources :child1 do
  resources :parent
end

resources :child2 do
  resources :parent
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...