«Нахождение» «родительского» объекта во вложенном ресурсе? - PullRequest
1 голос
/ 15 января 2009

Скажите, что у меня есть два ресурса, Project и Task. Проект может иметь много задач; Задача принадлежит одному проекту. Также скажите, что у меня есть Задача, вложенная в Project в Routs.rb:

map.resources :projects do |project|
  project.resources :tasks
end

Можно ли программно обнаружить эту связь? По сути, мне нужно динамически загрузить произвольный объект, затем выяснить, есть ли у него «родитель», и затем загрузить этого родителя.

Есть идеи?

Ответы [ 2 ]

1 голос
/ 15 января 2009

Маршрутизация не поможет вам, поскольку она предназначена только для использования в обратном направлении. Что вы можете сделать, так это навязать отношения с: parent:


class Task
  belongs_to :project
  alias :project :parent
end

И затем используйте это отношение, чтобы определить, доступен ли родительский объект:


if object.respond_to?(:parent)
  # do something
end

Кроме того, вы можете использовать полиморфные маршруты, если маршруты настроены правильно:


polymorphic_url([object.parent, object])
0 голосов
/ 15 января 2009

Ваш код выше определяет отношения для маршрутов и помогает генерировать правильных помощников для создания путей и тому подобное.

Вам нужно убедиться, что отношения правильно объявлены в ваших мадлах. В модели проекта вы должны иметь:

has_many :tasks

В вашей модели задачи вы должны иметь:

belongs_to :project

Как только вы это настроите, вы готовы получить то, что хотите.

@task = Task.first

unless @task.project.blank?
  project_name = @task.project.name
end
...