fil*_*lsa 111 activerecord ruby-on-rails arel
我想做的事情如下:
SELECT * FROM USER WHERE NAME LIKE '%Smith%';
Run Code Online (Sandbox Code Playgroud)
我在Arel的尝试:
# params[:query] = 'Smith'
User.where("name like '%?%'", params[:query]).to_sql
Run Code Online (Sandbox Code Playgroud)
但是,这变为:
SELECT * FROM USER WHERE NAME LIKE '%'Smith'%';
Run Code Online (Sandbox Code Playgroud)
Arel正确地包装查询字符串'Smith',但因为这是一个LIKE语句,所以它不起作用.
如何在Arel中进行LIKE查询?
PS奖金 - 我其实是想扫描桌子上两个字段,这两个名称和说明,看是否有查询的任意匹配.那会怎么样?
Ped*_*olo 272
这是你在arel中执行类似查询的方式:
users = User.arel_table
User.where(users[:name].matches("%#{user_name}%"))
Run Code Online (Sandbox Code Playgroud)
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)))
Run Code Online (Sandbox Code Playgroud)
Reu*_*aby 115
尝试
User.where("name like ?", "%#{params[:query]}%").to_sql
Run Code Online (Sandbox Code Playgroud)
PS.
q = "%#{params[:query]}%"
User.where("name like ? or description like ?", q, q).to_sql
Run Code Online (Sandbox Code Playgroud)
Aaand已经很长时间了,但是@ cgg5207添加了一个修改(如果您要搜索长命名或多个长命名参数或者您懒得输入,那么这个修改非常有用)
q = "%#{params[:query]}%"
User.where("name like :q or description like :q", :q => q).to_sql
Run Code Online (Sandbox Code Playgroud)
要么
User.where("name like :q or description like :q", :q => "%#{params[:query]}%").to_sql
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
86408 次 |
| 最近记录: |