如何在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
- 你如何编写一个迁移来重命名Rails中的ActiveRecord模型及其表格?
- 保留与ActiveRecord模型的名称
- attr_accessible(* attributes)和attr_protected(* attributes)有什么区别?
- 计数,大小,长度…在Ruby中有太多的select?
- 依赖=>摧毁一个“has_many通过”关联
- Rails – 最佳实践:如何创build相关的has_one关系
- 我怎样才能看到由Ruby on Rails中给定的ActiveRecord查询生成的SQL
- 急切加载多态
- Rails 3 + activerecord是为所有符合条件的logging“大量更新”单个字段的最佳方法