8

假设我有一个模型:

class Post
end  

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

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

谢谢 :)

4

3 回答 3

16

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

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

要获取类的名称:

arel.klass.name

众所周知,这适用于这些版本:

  • 最初在 ActiveRecord 4.2.4 中测试。
  • 在 Rails 5.2 中工作(@Raphael Souza)
于 2015-10-21T21:35:51.073 回答
5

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

class Post < ActiveRecord::Base
   has_many :comments
end

Post.reflect_on_association(:comments).klass
=> Comment
于 2019-03-07T23:29:30.467 回答
1

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

posts.first.class.name

这相当于写:

posts.[0].class.name

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

——斯科特

于 2010-11-24T10:47:36.203 回答