在Rails 3.1中,带范围的合并方法不再有效的原因是Rails 3.1引入了Active Record的新查询方式,称为Arel。Arel是一个更强大、更灵活的查询构建器,它提供了一种更简洁、更易于理解的方式来构建复杂的数据库查询。在Rails 3.1中,带范围的合并方法已经被弃用,因为它们与Arel的设计原则不符。
为了解决这个问题,您可以使用以下方法:
where
方法代替带范围的合并方法。例如,如果您之前使用了User.scoped_by_age(18)
,现在可以使用User.where(age: 18)
。users = User.arel_table
users_with_age_18_and_name_john = users.where(users[:age].eq(18).and(users[:name].eq('John'))).to_a
scope :scoped_by_age, ->(age) { where(age: age) }
然后,您可以像以前一样使用User.scoped_by_age(18)
。
总之,带范围的合并方法在Rails 3.1中不再有效,因为它们与Arel的设计原则不符。您可以使用where
方法或Arel构建更复杂的查询来替代它们。如果您仍然需要使用带范围的合并方法,可以将其添加到您的模型中。
领取专属 10元无门槛券
手把手带您无忧上云