我有两种模式:客户和合同。 客户端有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属性。
答案 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')