2009-10-07 54 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 ==:belongs_to} .collect {| table |表[0] .to_s.classify} – Denis 2009-10-08 09:33:32

0

当你有两个模型之间的关系,例如,具有一类的文章,你就必须在类别的has_many关系。并在文章中的belongs_to。

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

谢谢您的回答。 A同意你的观点。但我想用一个通用的方法来做到这一点。如果文章属于类别和杂志,我想提供: @ article.name.parents#=> [“Category”,“Magazine”] 但Article.parents方法不会返回每个belongs_to类,并在测试了一些其他方法后,如: @ article.belongs_to 我得到一个错误(因为belongs_to需要一个参数)或其他信息。并通过尝试以下搜索后: @ article.class.methods.each {| method |开始@ article.class.send(方法)救援真正结束} 我得到一个错误。 – Denis 2009-10-07 20:46:39

0

我相信这是不可能的,导致Rails在某些类中有belongs_to :something时正在做的事情,是一种元编程技术,在该类内部添加方法def something并且它并不真正存储这些“父”类。