4

我有三个模型:客户、银行和帐户。每个客户可以有多个账户,银行也是如此。

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'

如果我想找到客户 Jack 的所有帐户,我可以这样做

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 调用。

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 回答