如何在Arel和Rails中做一个LIKE查询?

我想做一些事情:

SELECT * FROM USER WHERE NAME LIKE '%Smith%'; 

我在Arel的尝试:

 # params[:query] = 'Smith' User.where("name like '%?%'", params[:query]).to_sql 

但是,这变成:

 SELECT * FROM USER WHERE NAME LIKE '%'Smith'%'; 

Arel正确地包装查询string“Smith”,但是因为这是一个LIKE语句,所以它不起作用。

在Arel中如何做一个LIKE查询?

PS奖金 – 我实际上试图扫描表中的两个字段,名称和说明,以查看是否有任何匹配的查询。 这将如何工作?

这是你如何在arel中执行一个类似的查询:

 users = User.arel_table User.where(users[:name].matches("%#{user_name}%")) 

PS:

 users = User.arel_table query_string = "%#{params[query]}%" param_matches_string = ->(param){ users[param].matches(query_string) } User.where(param_matches_string.(:name)\ .or(param_matches_string.(:description))) 

尝试

 User.where("name like ?", "%#{params[:query]}%").to_sql 

PS。

 q = "%#{params[:query]}%" User.where("name like ? or description like ?", q, q).to_sql 

Aaand已经很长时间了,但@ cgg5207添加了一个修改(如果要search长名称或多个长名称的参数,或者您懒得打字)

 q = "%#{params[:query]}%" User.where("name like :q or description like :q", :q => q).to_sql 

要么

 User.where("name like :q or description like :q", :q => "%#{params[:query]}%").to_sql 

Reuben Mallaby的答案可以进一步缩短使用参数绑定:

 User.where("name like :kw or description like :kw", :kw=>"%#{params[:query]}%").to_sql