2012-04-12 30 views
1

我有兩種模式:客戶端和合同。 客戶端有3個屬性:id,email和client_number。 契約也有3個:id,ip和client_id。 客戶has_many:合同。 合同belongs_to:客戶端。相關型號的自動生成方法

有了回報率,我得到自動生成的方法,如:

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屬性。

回答

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')