2010-12-29 7 views
0

私は、最初にinclude:includeを使うと思っていましたが、アドレステーブルのすべてのカラムが存在しないことを伝えるエラーが発生します。おそらくまだアドレステーブルについてはわからないので、引き続きusersテーブルをチェックしています。Ruby on Rails:2つのテーブルを検索するにはどうしたらいいですか?

検索コード:

search = params[:search] 
    conditions = "real_name LIKE '%#{search}%' OR login LIKE '%#{search}%' OR email LIKE '%#{search}%'" 
    address_conditions = "number LIKE '%#{search}%' OR street LIKE '%#{search}%' OR city LIKE '%#{search}%' OR state LIKE '%#{search}%' OR zip_code LIKE '%#{search}%'" 
    conditions = conditions + " OR " + address_conditions 
    @paid = User.find(:all, :include => :addresses, :conditions => "has_paid = 't' AND (#{conditions})") 

EDITは:変更:をを含める:参加し、私はこのエラーを取得する:

SQLite3::SQLException: no such column: number: 
     SELECT * FROM "users" 
     WHERE (has_paid != 't' AND 
        (real_name LIKE '%12%' OR login LIKE '%12%' OR email LIKE '%12%' OR 
         number LIKE '%12%' OR street LIKE '%12%' OR city LIKE '%12%' OR 
         state LIKE '%12%' OR zip_code LIKE '%12%')) 

答えて

4

@ house9は、:joinsが必要ですが、クエリのアドレスフィールドでテーブル名を使用する必要があります。したがって、"name LIKE '%#{search}%' ..."ではなく、"addresses.name LIKE '%#{search}%' ..."などが必要です。わかりやすくするために、ユーザフィールドにusers.を追加することもできますが、クエリの作成方法を暗示しています。

これらの状況で何かしようとする必要があるのは、データベースで直接クエリを実行することです。それでもエラーが発生した場合(これがこれです)、あなたのルビーではなく、あなたのクエリであることがわかります。

1

試み:参加する代わりに:

が含まもチェックlog/development.logすべてのSQLがログに記録されます

+0

私はまだ同じエラーが発生します。質問へのSQLコンソール出力のポスト。 – NullVoxPopuli

関連する問題