LoginSignup
3
0

More than 5 years have passed since last update.

has_manyメソッドに使用できるオプション

Last updated at Posted at 2016-05-28

多 対 多のアソシエーションを実現できるthroughメソッドはよく使用します。

また、has_manyメソッドには他にも次のようなオプションを指定できます。

オプション名 用途
class_name 関連するモデルのクラス名を指定でき、関連名(photos_tags等、has_manyの直後に書くもの)と参照先のクラス名(PhotosTagのようなモデル名)を異なるものにできる。
foreign_key 参照先を参照する外部キーの名前を指定できる(デフォルトは、参照先のモデル名_id)
dependent 親モデルのデータを消したら関連するモデルのデータも連動して消したいときに使用します。destroyとdelete_allでひとつひとつ消していくか、一気に消すかを指定できる
source 関連テーブルから先のモデルにアクセスするための(関連モデルから見た)関連名を指定できる
※has_many :answered_questions, through: :answers, source: :question
sourceオプションは関連テーブル(answers)から先のモデルにアクセスするための関連名を指定しています。今回はanswersテーブルを通し、questionsテーブルの情報を取得しているので:questionを指定しました。

アソシエーションの名前と関連先テーブルが同じ名前の場合、省略することもできます。今回の場合has_many :questionsというアソシエーション名にしてしまえばsourceオプションを書く必要はありません。しかし、それだと User と Question を紐付ける通常の1対多のアソシエーション定義とかぶってしまうのでanswered_questionという違う名前にしました。

「答えた質問」という意味でより分かりやすいですよね。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0