1

クライアントとコントラクトの2つのモデルがあります。クライアントには、id、email、client_numberの3つの属性があります。コントラクトにも3つあります:id、ip、client_id。クライアントhas_many:contracts。コントラクトbelongs_to:client。

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'

クライアントの属性のみを使用するのではありません。コントラクトモデルのip属性も使用したい。

4

1 に答える 1

0

Railsに組み込まれているマジックファインダーメソッドではこれを達成することはできません。しかし、次のように、より直接的なクエリでそれを行うことができます。

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

これは、Railsの2つの検索メカニズムの例です。1つはハッシュによる直接検索であり、2つ目は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 に答える