2012-04-12 2 views
1

두 가지 모델이 있습니다. 클라이언트 및 계약입니다. 클라이언트에는 id, email 및 client_number의 세 가지 속성이 있습니다. 계약에는 id, ip 및 client_id도 3 개 있습니다. 고객 has_many : 계약. belongs_to : client 계약.관련 모델이있는 자동 생성 된 메서드

Client.find_by_email_and_client_number 'some_email', 1234

하지만 원하는 자동 생성 방법과 같은 :

Client.find_by_email_and_client_number_and_ip 'some_email'의 RoR로

내가 좋아하는 자동 생성 방법을 얻을 , 1234, '192.168.200.54'

클라이언트의 속성 만 사용합니다. 계약 모델에서도 ip 속성을 사용하고 싶습니다.

답변

0

레일즈의 내장형 매직 파인더 방법으로는이를 구현할 수 없습니다. 그러나이 같은보다 직접적인 쿼리를 수행 할 수 있습니다

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

이 레일 '찾는 메커니즘의 두 가지 예입니다 : 첫 번째는 해시 직접 찾는 것, 두 번째는 SQL 조각입니다.

실제로 당신이 여기서 찾고있는 것은 일종의 관계입니다. has_many 연결의 키로 client_number을 설정하면 다음과 같이 쿼리 할 수 ​​있습니다.

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