«Найти» «родительский» объект во вложенных ресурсных отношениях?

StackOverflow https://stackoverflow.com/questions/445606

  •  22-07-2019
  •  | 
  •  

Вопрос

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

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

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

Есть идеи?

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

Решение

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


class Task
  belongs_to :project
  alias :project :parent
end

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


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

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


polymorphic_url([object.parent, object])

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

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

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

has_many :tasks

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

belongs_to :project

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

@task = Task.first

unless @task.project.blank?
  project_name = @task.project.name
end
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top