从符号中获取模型类

Ant*_*nAL 11 symbols model ruby-on-rails

我正在实现一个方法,它将在项目的许多地方使用.

def do association

end
Run Code Online (Sandbox Code Playgroud)

"关联"是一个符号,例如:articles,:tags,:users等.

当关联时:articles,我需要使用Article模型.

当关联时:users,我需要使用User模型.

等等.

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

Har*_*tty 27

Rails 为此目的提供了一个classifyString类上调用的方法.

:users.to_s.classify.constantize
#User

:line_items.to_s.classify.constantize
#LineItem
Run Code Online (Sandbox Code Playgroud)

编辑:

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

Author.reflect_on_association(:books).klass
# => Book
Run Code Online (Sandbox Code Playgroud)

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

例如:

class Order
  has_many :line_items
  has_many :active_line_items, :class_name => "LineItem", 
             :conditions => {:deleted => false}
end
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,:active_line_items将导致ActiveLineItem我们的原始代码将抛出错误.

在这里阅读更多相关信息.