1

我有两个模型:客户和合同。客户端有 3 个属性:id、email 和 client_number。合同也有 3 个:id、ip 和 client_id。客户 has_many :contracts。合同 belongs_to :客户。

使用 RoR,我得到自动生成的方法,例如:

Client.find_by_email_and_client_number 'some_email', 1234

但我想要一个自动生成的方法,如:

Client.find_by_email_and_client_number_and_ip 'some_email', 1234, '192.168.200.54'

仅使用非客户的属性。我也想使用 Contract 模型中的 ip 属性。

4

1 回答 1

0

使用 Rails 的内置魔法查找器方法将无法实现这一点。但是您可以使用更直接的查询来做到这一点,如下所示:

Client.includes(:contracts).where(:email => 'some_email', :ip => '192.168.200.54').where('contracts.client_number = 1234')

这是 Rails 的两种查找机制的示例:第一种是直接通过哈希查找,第二种是 SQL 片段。

不过,看起来您实际上在这里寻找的是某种关系。如果client_number设置为has_many关联的键,这样查询可能更容易:

client = Client.find_by_client_number(1234)
client.contracts.where(:email => 'some_email', :ip => '192.168.200.54')
于 2012-04-12T15:33:18.507 回答