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

问题描述 投票:4回答:3

假设我有一个模型:

class Post
end  

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

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

谢谢 :)

ruby-on-rails activerecord model classname relation
3个回答
5
投票

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

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

获取班级名称:

arel.klass.name

在ActiveRecord 4.2.4中测试


1
投票

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

class Post < ActiveRecord::Base
   has_many :comments
end

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

0
投票

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

posts.first.class.name

这相当于写作:

posts.[0].class.name

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

- 斯科特

© www.soinside.com 2019 - 2024. All rights reserved.