我正在实施一个方法,该方法将在项目的许多地方使用。
def do association
end
“关联”是一个符号,例如:articles
,:tags
,:users
等。
当关联为:articles
时,我需要使用文章模型。
当关联为:users
时,我需要使用用户模型。
等
我知道,我可以编写一个辅助方法,它返回模型类,具体取决于提供的符号。但是有没有现成的方法呢?
答案 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