2009-10-07 3 views
0

Учитывая это:Знающие родителей от объекта

@article = Article.first(:joins => :category) 

ли ActiveRecord обеспечивает generique метод, который возвращал массив любого принадлежит имени класса?

Например:

@article.name.parents # => ["category"] 

Благодаря

ответ

0

Чтобы найти все «BELONGS_TO» ассоциации для вашей модели, те, из которых «родители» вы можете сделать это:

YourModel.reflections.select { |name, reflection| reflection.macro == :belongs_to } 
+0

Удивительная идея! Большое спасибо. Я просто добавляю некоторые другие методы, и все в порядке: Article.reflections.select {| name, reflection | reflection.macro ==: принадлежит_to} .collect {| table | таблица [0] .to_s.classify} – Denis

0

Когда у вас есть отношения между двумя моделями, например, изделие, имеющее одну категорию, вы будете иметь has_many отношения в данной категории. И принадлежит принадлежит этой статье.

class Article < ActiveRecord::Base 
    belongs_to :category 
end 

class Category < ActiveRecord::Base 
    has_many :articles 
end 

Затем вы можете либо из статьи, либо из категории получить связанный объект.

article.category # => The category 
category.articles # => The articles 

Нет родителя. Каждая модель имеет свои отношения. Если вам нужно восстановить отношения одной модели, вы должны определить ее, чтобы иметь доступ к ней.

+0

Спасибо за ваш ответ. Согласитесь с вами. Но я хотел бы использовать общий метод для этого. Если, например, статья относится к категории и журналу, я хотел бы предоставить следующее: @ article.name.parents # => ["Категория", "Журнал"] Но метод Article.parents не возвращает классы classes_to , и после тестирования некоторых других методов, таких как: @ article.belongs_to Я получаю сообщение об ошибке (потому что принадлежит_имя требует аргумента) или другую информацию. И после поиска, попробовав это: @ article.class.methods.each {| method | begin @ article.class.send (метод) rescue true end} Я получаю сообщение об ошибке. – Denis

0

Я считаю, что это невозможно, так как Rails делает это при наличии belongs_to :something внутри некоторого класса, это метод мета-программирования, который добавляет метод def something внутри этого класса, и на самом деле он не хранит эти «родительские» классы.

Смежные вопросы