[解決済み】Railsのhas_one/has_manyの:sourceオプションについて理解する。
質問
を理解するのを助けてください。
:source
のオプションは
has_one/has_many :through
の関連付けを行います。Rails APIの説明では、ほとんど意味がわかりません。
で使用されるソースアソシエーション名を指定します。
has_many
:through => :queries
. から名前を推測できない場合のみ使用します。 を連想させる。has_many :subscribers, :through => :subscriptions
意志 のどちらかを探します。:subscribers
または:subscriber
オンSubscription
, がなければ:source
が指定されています。
解決方法は?
時には、異なるアソシエーションに対して異なる名前を使用したい場合があります。もし、モデル上のアソシエーションに使いたい名前が
:through
モデルを使用する場合は
:source
で指定します。
私は、上記の段落は
大いに
の方が分かりやすいので、ドキュメントにあるような例を紹介します。3つのモデルがあるとします。
Pet
,
Dog
と
Dog::Breed
.
class Pet < ActiveRecord::Base
has_many :dogs
end
class Dog < ActiveRecord::Base
belongs_to :pet
has_many :breeds
end
class Dog::Breed < ActiveRecord::Base
belongs_to :dog
end
この場合、名前空間として
Dog::Breed
にアクセスしたいからです。
Dog.find(123).breeds
を、便利で素敵な関連付けとして使うことができます。
さて、ここで
has_many :dog_breeds, :through => :dogs
の関連付けは
Pet
となると、突然問題が発生します。Railsは
:dog_breeds
の関連付けは
Dog
であるため、Railsは
どの
Dog
のアソシエーションを使用します。入力する
:source
:
class Pet < ActiveRecord::Base
has_many :dogs
has_many :dog_breeds, :through => :dogs, :source => :breeds
end
と
:source
をRailsに伝えています。
というアソシエーションを探します。
:breeds
の上で
Dog
モデル
(に使われているモデルなので)。
:dogs
を作成し、それを使用します。
関連
-
[解決済み] SocketError (getaddrinfo: Name or service not known) - Sunspot/Solr Rails development
-
[解決済み] モデルで `save` と `save!` はいつ使うのか?
-
[解決済み] Railsマイグレーションで、既存のテーブルにカラムを追加する
-
[解決済み] SocketError (getaddrinfo: Name or service not known) - Sunspot/Solr Rails development
-
[解決済み] Herokuのデータベースを空にする方法
-
[解決済み] REST JSON APIのサーバーとクライアントを分離?[クローズド]
-
[解決済み】rmagick gem install "Can't find Magick-config"...
-
[解決済み】Railsのhas_one/has_manyの:sourceオプションについて理解する。
-
[解決済み] 新しいRailsアプリを作成するときに、test-unitではなくRSpecを使用するようにRailsに指示するにはどうすればよいですか?
-
[解決済み] サインアップするためのDeviseルートを削除するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] PGError: エラー: リレーションのカラムが存在しない
-
[解決済み] モデルで `save` と `save!` はいつ使うのか?
-
[解決済み] Rails 3 - link_to を image_tag + text で表示する。
-
[解決済み] Railsマイグレーションで、既存のテーブルにカラムを追加する
-
[解決済み] Railsのインストール時に「/usr/binディレクトリに書き込み権限がありません」というエラーが発生しますが、どのように修正すればよいですか?
-
[解決済み] SocketError (getaddrinfo: Name or service not known) - Sunspot/Solr Rails development
-
[解決済み] Herokuのデータベースを空にする方法
-
[解決済み] REST JSON APIのサーバーとクライアントを分離?[クローズド]
-
[解決済み] githubからあるgemの特定の「コミット」を取得するには?
-
[解決済み] サインアップするためのDeviseルートを削除するにはどうすればよいですか?