是否有一种聪明的方法只能为near_matches选择一个?如果我找到与我正在寻找的名称完全匹配,我不希望在近似匹配列表中。
@match = Item.where("name = '" + params[:name] + "'").first
if @match
@near_matches = Item.where("name like '%" + params[:name] + "%' and id != " + @match.id.to_s)
else
@near_matches = Item.where("name like '%" + params[:name] + "%'")
end
答案 0 :(得分:1)
不完全是你所要求的,但这有点紧张:
@match = Item.find_by_name params[:name]
@near_matches = Item.where('name LIKE ?', "%#{params[:name]}%")
@near_matches = @near_matches.where('id != ?', @match.id) if @match
这是有效的,因为查询是懒惰的 - 它们实际上并不会在它们需要之前运行。
问号是针对绑定变量的,这更安全。