Ruby on Rails:如何使用ActiveRecord对具有两个外键引用的表进行查询

Zyi*_*iii 4 activerecord ruby-on-rails

我有三种模式:客户,银行和账户.每个客户都可以拥有多个账户,银行也是如此.

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'
Run Code Online (Sandbox Code Playgroud)

如果我想找到客户杰克的所有账户,我可以做到

Customer.find_by_name('jack').Accounts
Run Code Online (Sandbox Code Playgroud)

如果我想查找花旗银行的所有账户,那么我可以查询

Bank.find_by_name('Citi').Accounts
Run Code Online (Sandbox Code Playgroud)

我的问题是如何通过ActiveRecord找到属于花旗银行的Customer Jack帐户?有一些方法可以显式生成SQL语句,但我想知道如何以通用方式对具有相同关系的其他模型执行类似的查询.

Edw*_*ard 9

accounts = Account.joins(:bank, :customer)
                  .where( banks: { name: "Citi" }, customers: { name: "Jack" } )
Run Code Online (Sandbox Code Playgroud)

我想我的复数银行/银行,客户/客户是正确的.如果它第一次不起作用,请在控制台中尝试 - 按阶段构建,首先是连接,然后是位.

这样做的好处是只能进行一次SQL调用.

rails查询指南非常有用 - http://guides.rubyonrails.org/active_record_querying.html