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

Cro*_*lio 4 activerecord model ruby-on-rails classname relation

假设我有一个模型:

class Post
end  

posts = Post.where(***)  
puts posts.class # => ActiveRecord::Relation  
Run Code Online (Sandbox Code Playgroud)

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

谢谢 :)

Way*_*rad 5

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

arel = User.where(name: "fred")
arel.klass    # User
Run Code Online (Sandbox Code Playgroud)

获取班级名称:

arel.klass.name
Run Code Online (Sandbox Code Playgroud)

在ActiveRecord 4.2.4中测试


Tom*_*pin 5

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

class Post < ActiveRecord::Base
   has_many :comments
end

Post.reflect_on_association(:comments).klass
=> Comment
Run Code Online (Sandbox Code Playgroud)


Sco*_*ott 0

对你的问题最简单、最直接的回答是:

posts.first.class.name
Run Code Online (Sandbox Code Playgroud)

这相当于写:

posts.[0].class.name
Run Code Online (Sandbox Code Playgroud)

您可以这样做,因为您的查询将返回一个可枚举的结果。(ActiveRecord::Relation 实现了 Ruby 的 Enumerable 接口)。

——斯科特