0

このクエリを検索フォームに使用できて本当によかったです。しかし、それが正しく機能していないことがわかりました。失敗したビットは、.wherewhichlikeに対してparams[:query]です。これlikeは、4 つの異なるフィールドに対して 4 回発生します。しかし、結果は、これが起こっていないことを示しています。

 @events_casual  = Event.non_timetable.where("events.finish_date >= ?", @time).where((["CAST(headers.title_es as varchar(255)) LIKE ?", "%#{params[:query]}%"] || ["CAST(headers.title_en as varchar(255)) LIKE ?", "%#{params[:query]}%"] || ["CAST(headers.title_eu as varchar(255)) LIKE ?", "%#{params[:query]}%"] || ["CAST(headers.title_fr as varchar(255)) LIKE ?", "%#{params[:query]}%"])).includes(:header).order("events.start_date ASC")

私はこのクエリを次のように変換しようとしています:

@events_casual  = Event.non_timetable.joins(:header).where(" params[:query] in (?)", [headers.title_es, headers.title_en, headers.title_eu]).order("events.start_date ASC")

しかし、これはうまくいきません。Error: undefined method{}:Hash` の title_es'

同様の構文を試しました。しかし、役に立たない。

そのクエリを書き直す助けは大歓迎です。ありがとう

4

1 に答える 1

0

以下を試してください

@events_casual  = Event
  .non_timetable
  .includes(:header)
  .order("events.start_date ASC")
  .where("events.finish_date >= ?", @time)
  .where("CAST(headers.title_es as varchar(255)) LIKE :query OR CAST(headers.title_en as varchar(255)) LIKE :query OR CAST(headers.title_eu as varchar(255)) LIKE :query OR CAST(headers.title_fr as varchar(255)) LIKE :query", { query: "%#{params[:query]}%"])
于 2013-04-17T07:48:24.870 に答える