我很高兴在搜索表单中使用此查询。但是,刚刚发现它无法正常工作。
失败位是.where
like
对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
title_es'代表{}:Hash`
我尝试过类似的语法。但无济于事。
任何帮助重写该查询非常感谢。感谢
答案 0 :(得分: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]}%"])