0

我很高兴将此查询用于搜索表单。但是,刚刚发现无法正常工作。失败的位.wherelike反对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 回答