在rubyonrails中,如何从ActiveRecord :: Relation对象获取关联的模型类?

时间:2010-11-24 05:51:18

标签: ruby-on-rails activerecord model classname relation

假设我有一个模型:

class Post
end  

posts = Post.where(***)  
puts posts.class # => ActiveRecord::Relation  

那么如何通过变量'posts'获取模型类名称,也许是一些名为model_class_name的方法:
    put posts.model_class_name#=>发布

谢谢:)

3 个答案:

答案 0 :(得分:5)

ActiveRecord::Relation的#klass属性返回构建关系的模型类:

arel = User.where(name: "fred")
arel.klass    # User

获取班级名称:

arel.klass.name

在ActiveRecord 4.2.4中测试

答案 1 :(得分:0)

您问题的最简单直接的答案是:

posts.first.class.name

这相当于写作:

posts.[0].class.name

您可以执行此操作,因为您的查询将返回可枚举的结果。 (ActiveRecord :: Relation实现了Ruby的Enumerable接口)。

- 斯科特

答案 2 :(得分:0)

对于有效的解决方案,即使没有相关项目:

class Post < ActiveRecord::Base
   has_many :comments
end

Post.reflect_on_association(:comments).klass
=> Comment