4

私には、顧客、銀行、口座の3つのモデルがあります。各顧客は多くの口座を持つことができ、銀行もそうです。

class Customer < ActiveRecord::Base
has_many :Accounts

class Bank < ActiveRecord::Base
has_many :Accounts

Account < ActiveRecord::Base
belongs_to :Customer, :foreign_key => 'customerID'
belongs_to :Bank, :foreign_key => 'bankID'

顧客ジャックのすべてのアカウントを検索したい場合は、次のことができます

Customer.find_by_name('jack').Accounts

シティバンクのすべての口座を検索したい場合は、次のようなクエリを実行できます

Bank.find_by_name('Citi').Accounts

私の質問は、ActiveRecordでCiti銀行に属するCustomer Jackのアカウントを見つけるにはどうすればよいですか?SQLステートメントを明示的に生成する方法はいくつかありますが、一般的な方法で同じ関係を持つ他のモデルに対して同様のクエリを実行するにはどうすればよいでしょうか。

4

2 に答える 2

9
accounts = Account.joins(:bank, :customer)
                  .where( banks: { name: "Citi" }, customers: { name: "Jack" } )

私は複数形の銀行/銀行、顧客/顧客を正しい方向に持っていると思います。初めて機能しない場合は、コンソールで試してください。段階ごとに構築し、最初に結合してから、whereビットを作成します。

これには、SQL呼び出しが1つだけであるという利点があります。

Railsクエリガイドは非常に便利です-http: //guides.rubyonrails.org/active_record_querying.html

于 2012-06-06T18:14:17.727 に答える
0
bank = Bank.find_by_name('City')
accounts = Customer.find_by_name('jack').accounts.where(:bank_id => bank.id)
于 2012-06-06T17:05:29.370 に答える