Ruby on Rails: как искать между двумя таблицами? - PullRequest
0 голосов
/ 29 декабря 2010

Я подумал, что первое, что я хотел бы сделать, это использовать: include, но я получаю сообщение об ошибке, сообщающее, что все столбцы из таблицы адресов не существуют - возможно, потому, что он до сих пор не знает о таблице адресови все еще проверяет таблицу пользователей.

код поиска:

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})")

РЕДАКТИРОВАТЬ: изменил: include на a: объединения, и я получаю эту ошибку:

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

Ответы [ 2 ]

4 голосов
/ 29 декабря 2010

Как сказал @ house9, вам нужно использовать :joins, но также вам нужно использовать имя таблицы в полях адреса в запросе.Поэтому вместо "name LIKE '%#{search}%' ..." вам нужно "addresses.name LIKE '%#{search}%' ..." и т. Д. Для ясности вы можете добавить users. к пользовательским полям, но это подразумевается при построении запроса.

Следует попытаться сделать в этих ситуациях, чтобы запустить ваш запрос непосредственно в вашей базе данных.Если он по-прежнему выдает ошибки (что произойдет), вы знаете, что это ваш запрос, а не рубин.

1 голос
/ 29 декабря 2010

try: joins вместо: include

также проверьте log / development.log, в котором все sql зарегистрировано

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...