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
对于返回的 Postgresql
"posts"."staff_pick" = 't'
这是正确的。
Rails 4.2.3 打破了这种行为,返回相同的代码
"posts"."staff_pick" = $1
如何在 Rails 4.2.3 和 4.2.4 中获得相同的有效 SQL?
最佳答案
这在 Rails 4.2.3 中确实发生了变化,但是可以通过更新范围以使用 AREL 来获得没有绑定(bind)的原始行为:
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。
关于ruby-on-rails - 随着 Rails 4.2.3 改变 where_values 的行为,我如何获得 where_values 的有效 SQL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32971150/