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 に答える
1

あなたの質問に対する最も単純で直接的な答えは次のとおりです。

posts.first.class.name

これは次のように書くことと同じです:

posts.[0].class.name

これを行うことができるのは、クエリが列挙可能な結果を​​返すためです。(ActiveRecord::Relation は Ruby の Enumerable インターフェイスを実装しています)。

-- スコット

于 2010-11-24T10:47:36.203 に答える