Rails 3.2 - OR查询无法正常工作 - 重写查询

时间:2013-04-17 07:39:58

标签: ruby-on-rails ruby-on-rails-3 sqlite postgresql

我很高兴在搜索表单中使用此查询。但是,刚刚发现它无法正常工作。 失败位是.where likeparams[: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`

我尝试过类似的语法。但无济于事。

任何帮助重写该查询非常感谢。感谢

1 个答案:

答案 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]}%"])