非常に複雑なクエリを作成しようとしていて、問題が発生しています。私が逃しているものを取り除く Active Record Associations
とActive Record Query Interface
(具体的にはsection 12 - joins)のRails Guides
を読んでいますが、それらがどのように関連していて、なぜ結合/インクルードが必要なのか分かりません。モデルに関連があるときにRailsで結合/インクルードが必要な理由を理解するのに苦労しています
アソシエーションのページには、「Active Recordアソシエーションを使用すると、宣言的に2つのモデルの間に接続があることをRailsに伝えることで、これらの操作と他の操作を合理化できます。クエリページの12.2節では、「アクティブレコードを使用すると、モデルで定義されている関連付けの名前を、結合メソッドを使用するときにその関連付けにJOIN句を指定するためのショートカットとして使用できます。
これらの2つの文は、私にはお互いに多少の不一致があります。 belongs_toという関連付けを作成すると、なぜ両方のテーブルからデータを取得しようとしている場合に結合が必要なのですか?それを別の方法を探している相手:
class Customer < ActiveRecord::Base
has_many :orders
end
class Order < ActiveRecord::Base
belongs_to :customer
end
私は@orders = Order.all
をすれば、私は@orders.first.customer.name
を実行して、出力顧客名をすることができます。しかし、名前に「スミス」を含むすべての注文を選択したい場合は、@orders=Order.where('customer.name ilike "%smith%"').joins(:customer)
この「関係」は前半にどのように働いていますが、後半に参加する必要がありますか?
偉大説明:
ここで問題に2件の良い記事があります!あなたは本当に私のためにギャップを埋めるのを助けました。また、その最初の記事は本当に私の新しい情報を与えました - 私はすべての関係をどのようにミックスして一致させるか理解できませんでした。うまくいけば、これは私の質問を元に戻すのに役立ち、私が探している結果を得ることができます。 :) – Ben
は、遅延読み込みの問題 'select.preload(articles).last'と' select.last.preload(articles) 'の順序は同じですか? – Ben
はい、事前ロードはスコープ設定されたセクションでのみ可能です。例えば、 'User.joins(:articles).each'のようにします。スコープから直接ロードする必要があります。それ以外の場合は、おそらく未定義で失敗します。 – fbelanger