Rails

【Rails】モデル名を直接指定できるclass_nameオプションについて簡単にまとめみた

Rails

[quads id=1]

 

今回はモデル名を直接指定することができるclass_nameオプションについてまとめたので紹介したいと思います。関連付けの相手となるオブジェクト名を関連付け名から生成できない事情がある場合に役立つオプションになります。

この記事の内容
  1. class_nameとは
  2. まとめ
  3. 参考

class_nameとは

class_nameとは、関連名と参照先のクラス名を異なるものに置き換えることができるオプションです。関連付けの相手となるオブジェクト名を関連付け名から生成できない事情がある場合に役立つオプションになります。

例を見てみます。

以下のようにUserとPostが1対多の関係で紐づいているとします。

class User < ActiveRecord::Base
  has_many :posts
end
class Post < ActiveRecord::Base
  belongs_to :user
end

 

この場合、post.userと記述することで1つの投稿(post)に紐づいたユーザー(user)を取得することができます。

post.user
=> postに紐づいたユーザーを取得できる

 

しかし、関連付けの相手となるオブジェクト名を関連付け名から生成できない事情出てくる場合があります。このような場合に使えるのがclass_nameオプションになります。

以下のようにclass_nameを付与することでモデル名を直接指定できるようになり、post.ownerでも投稿に紐づいたユーザーを取得することが可能になります。

class User < ActiveRecord::Base
  has_many :posts
end
class Post < ActiveRecord::Base
  belongs_to :owner, class_name: 'User'
end
post.owner
=> postに紐づいたユーザーを取得できる

まとめ

  • class_nameとは関連名と参照先のクラス名を異なるものに置き換えることができるオプション
  • class_nameは関連付けの相手となるオブジェクト名を関連付け名から生成できない事情がある場合に役立つオプション

参考

Active Record の関連付け

 

今回はモデル名を直接指定することができるclass_nameオプションについて紹介しました。関連付け周りは痒いところにも手が届くオプションが多々あり調べてみると面白いかもしれませんね。