如何将搜索字符串传递给rails范围

时间:2017-09-01 21:44:17

标签: sql ruby-on-rails ruby scope

我见过以下示例,但query: "%#{query}%"是什么意思?

  scope :by_query, ->(query, ...){
    joins(...).
    where(... OR
           ... ,
      query: "%#{query}%"
    )
  }

1 个答案:

答案 0 :(得分:1)

可能假设正在执行sql LIKE运算符,但是,它不是:

query = 'something' 
User.where(query: "%#{query}%").to_sql
# => SELECT "users".* FROM "users"
#    WHERE "users"."query" = '%something%'

它只是使用Active Record查询接口的hash conditions功能来精确查找等于值%#{query}%的值。如果它应该进行LIKE查询,则需要执行以下操作:

User.where("query LIKE ?", "%#{query}%").to_sql
# SELECT "users".* FROM "users"
# WHERE (query LIKE '%something%')