记录选择接近匹配的位置取决于Rails 3中先前的直接匹配

时间:2011-06-17 18:27:51

标签: ruby-on-rails-3 activerecord

是否有一种聪明的方法只能为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

1 个答案:

答案 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

这是有效的,因为查询是懒惰的 - 它们实际上并不会在它们需要之前运行。

问号是针对绑定变量的,这更安全。