Получение родительского ресурса из URL - PullRequest
1 голос
/ 30 октября 2010

У меня есть два объекта (@stacks и @stories) с отношениями has_many (через @anthologies).Истории можно просматривать по отдельности (/ story / 1 /) или в виде набора в стеке (/ stacks / 1 / story / 1 /).

map.resources :stories
map.resources :anthologies
map.resources :stacks, :has_many => :stories do |stack|
  stack.resources :stories
end  

У меня работает этот базовый фрейм. Я пытаюсь определить, когда история воспроизводится как часть стека, чтобы я мог построить некоторую навигацию между историями.Я полагаю, что самый простой способ сделать это - проверить URL-адрес основного контроллера, но 1) я не знаю, как это сделать, и 2) это выглядит очень неуместно, так как должен быть более прямой путь.

Все еще разбираетесь в некоторых основах Rails здесь - какие-нибудь рекомендации о том, как достичь желаемой функциональности?

Ответы [ 2 ]

3 голосов
/ 31 октября 2010

Вы определили как вложенные, так и не вложенные маршруты для :stories.Когда ваш StoriesController получает запрос со следующими параметрами:

/stacks/1/stories # nested form

или с этими

/stories # non-nested form

Маршрут отобразится на {:controller => :stories, :action => :index }.Во вложенной форме хэш params будет включать :stack_id => 1.В не вложенной форме это не так.

1 голос
/ 31 октября 2010

если вы обращаетесь к дочернему ресурсу, то параметры будут включать родительский ресурс по умолчанию.

Например, "/ stacks / 1 / story / 2 /" будет иметь следующую структуру params:

{:action => 'show', :controller => 'stories', :stack_id => 1, :id => 2 }

Если вы хотите найти вложенный ресурс в контроллере, просто посмотрите на наличие parent_id в хэше params, например ::100100

before_filter :find_stack

protected
def find_stack
  if params[:stack_id]
     Stack.find(params[:stack_id])
  end
end
...