2013-04-17 81 views
0

我真的很高兴使用此查询搜索表单。然而,只是发现,这是不正常工作。 失败位是.where其中likeparams[:query]。这like对4个不同的领域发生4次。但是,结果表明这不会发生。Rails 3.2 - OR查询无法正常工作 - 重写查询

@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'{}:哈希'

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

任何帮助重写该查询非常赞赏。由于

回答

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]}%"]) 
+0

它似乎工作得很好。非常感谢。任何想法为什么我的第一个查询没有按预期工作? –

+0

我很确定在你的查询中使用'||'不会转化为'OR'时AR转换代码为sql。 :) – jvnill