Rails - Найти с 3 условиями? - PullRequest
0 голосов
/ 07 июля 2010

Эй, у меня условие поиска немного длинное, и я бы хотел сделать его длиннее.

ТАК

:conditions =>  ["name LIKE ? OR description LIKE ?", "%#{params[:search_keyword]}%",
        "%#{params[:search_keyword]}%"]

Где ищет модель, если атрибут: name или: description похож на параметр из текстового поля. Теперь я также хотел бы добавить, чтобы убедиться, что найденные записи являются текущими. У меня уже есть

:conditions => ["start_date between ? and ? ", Date.today, @yearstime ]

Где @yearstime - @yearstime = Date.today + 365.days, так что, по сути, все, что есть в модели, с текущей даты до года с этого момента

Я бы хотел объединить оба условия, но не уверен в синтаксисе. Я пытался собрать все это вместе.

:conditions =>  ["name LIKE ? OR description LIKE ? AND start_date between ? and ?",
 "%#{params[:search_keyword]}%", "%#{params[:search_keyword]}%", Date.today, @yearstime ]

но он все еще не рассчитывается для параметра даты .... Есть идеи, что я делаю не так?

Ответы [ 2 ]

1 голос
/ 07 июля 2010

Похоже, это проблема порядка операторов. Попробуйте

:conditions =>  ["(name LIKE ? OR description LIKE ?) AND (start_date between ? and ?)",
 "%#{params[:search_keyword]}%", "%#{params[:search_keyword]}%", Date.today, @yearstime ]

Оператор AND имеет более высокий приоритет, чем OR

Справка:

0 голосов
/ 07 июля 2010

Является ли start_date датой или date_time.Может быть проблема с кастингом от одного к другому.

...