ActiveRelation
个实例有where_values
。在Rails 4.2.2和更早版本中的代码
class Post < ActiveRecord::Base
scope :staff_picks, -> { where(staff_pick: true) }
end
puts Post.staff_picks.where_values[0].to_sql
for Postgresql返回
"posts"."staff_pick" = 't'
这是正确的。
Rails 4.2.3打破了这种行为,相同的代码返回
"posts"."staff_pick" = $1
如何在Rails 4.2.3和4.2.4中获得相同的有效SQL?
答案 0 :(得分:2)
这在Rails 4.2.3中有所改变,但是没有绑定的原始行为可以通过更新范围来获得使用AREL:
class Post < ActiveRecord::Base
scope :staff_picks, -> { where(arel_table[:staff_pick].eq(true)) }
end
puts Post.staff_picks.where_values[0].to_sql # => "`posts`.`staff_pick` = 1"
这也向后兼容Rails 4.1和Rails 3.2。