2017-09-01 58 views
0

我已经看到下面的示例,但query: "%#{query}%"是什么意思?如何将搜索字符串传递到导轨范围

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

这就像运算符的SQL。参见[参考](https://www.w3schools.com/sql/sql_like.asp)和[示例](https://stackoverflow.com/questions/19105706/rails-4-like-query-activerecord-adds-引号) –

回答

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%')