Вопрос

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

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

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

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

Это было полезно?

Решение

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

/stacks/1/stories # nested form

или с этим

/stories # non-nested form

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

Другие советы

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

Например, "/ Stacks / 1 / Stories / 2 /" будут иметь структуру параметров, как это:

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

Если вы хотите найти вложенный ресурс в контроллере, просто ищите наличие Parent_ID в парами Hash HASH, например:

before_filter :find_stack

protected
def find_stack
  if params[:stack_id]
     Stack.find(params[:stack_id])
  end
end
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top