具有相关模型的自动生成方法

时间:2012-04-12 15:21:26

标签: ruby-on-rails magic-methods

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

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

Client.find_by_email_and_client_number'seat_email',1234

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

Client.find_by_email_and_client_number_and_ip'seat_email',1234,'192.168.200.54'

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

1 个答案:

答案 0 :(得分: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')