pjm*_*rse 9 activerecord ruby-on-rails
ActiveRecord的.where()查询方法支持这样的插值:
Book.where("author_id IS ? AND genre_id IS ?", author_id, genre_id)
Run Code Online (Sandbox Code Playgroud)
该.select()方法是否支持类似的插值,或者我们是否需要使用标准的Ruby字符串插值(例如"WHEN genre_id IS #{genre_id} THEN 2").
(这看起来似乎是一个牵强附会的用例,但基本上我们正在构建一个带有计算字段的查询 - SUM() as sum例如 - 根据每个记录的字段使用不同的值,通过CASE语句,我们希望避免努力 - 将值编码到查询中.)
我对所有答案感兴趣,但这个特定的应用程序恰好仍然在Rails 3.2.x上.
您可以使用ActiveRecord :: Sanitization之一:
def self.select_with_params(sql, params = [])
query = sanitize_sql_array([sql, params].flatten)
select(query)
end
Run Code Online (Sandbox Code Playgroud)
在AR链接中使用此方法:
User.where(name: 'name').select_with_params("name='%s' and group_id='%s'", "foo'bar", 4)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1180 次 |
| 最近记录: |