从符号中获取模型类

时间:2011-03-15 18:27:50

标签: ruby-on-rails model symbols

我正在实施一个方法,该方法将在项目的许多地方使用。

def do association

end

“关联”是一个符号,例如:articles:tags:users等。

当关联为:articles时,我需要使用文章模型。

当关联为:users时,我需要使用用户模型。

我知道,我可以编写一个辅助方法,它返回模型类,具体取决于提供的符号。但是有没有现成的方法呢?

2 个答案:

答案 0 :(得分:27)

为此目的,Rails在classify类上提供了一个名为String的方法。

:users.to_s.classify.constantize
#User

:line_items.to_s.classify.constantize
#LineItem

修改:

如果您要检索与关联关联的类,请使用以下方法:

Author.reflect_on_association(:books).klass
# => Book

这将解决关联名称与类名称不匹配的情况。

E.g:

class Order
  has_many :line_items
  has_many :active_line_items, :class_name => "LineItem", 
             :conditions => {:deleted => false}
end

在上面的示例中,:active_line_items将导致ActiveLineItem,我们的原始代码将出错。

详细了解此here

答案 1 :(得分:1)

这将有效

(:users.to_s.singularize.capitalize.constantize).find :all, :conditions => ["name = ?", "john"]

用你的例子

association.to_s.singularize.capitalize.constantize