大佬教程收集整理的这篇文章主要介绍了ruby-on-rails-3 – 如何在使用`average()’时在AREL中使用`to_sql`?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
这样做:
Review.where("reviewed_user_id = ?",self.reviewed_user_id).to_sql #=> "SELECT `reviews`.* FROM `reviews` WHERE (reviewed_user_id = 3)"
这会导致NoMethodError:
Review.where("reviewed_user_id = ?",self.reviewed_user_id).average(:stars).to_sql #=> undefined method `to_sql' for 3:Fixnum
所以这意味着to_sql正在调用AREL的结果,而不是AREL对象 – 但是为什么?
如何获取生成的SQL?
通过查看ActiveRecord :: Calculations的内部结构,您可以导出如何获取它使用的SQl.
@H_100_4@my_reviewed_user_id = 42 relation = Review.where('reviewed_user_id = ?',my_reviewed_user_id) column = Arel::Attribute.new(Review.unscoped.table,:stars) relation.SELEct_values = [column.average] relation.to_sql #=> "SELECT AVG(\"reviews\".\"stars\") AS avg_id FROM \"reviews\" WHERE (reviewed_user_id = 42)"如果您正在控制台工作,请小心. ActiveRecord :: Relation缓存的东西,所以如果你一个一行地输入上面的控制台,它实际上不会工作,因为漂亮的打印强制的关系.然而,用分号分隔上述并没有新行将会奏效.
或者,您可以直接使用Arel,如下所示:
@H_100_4@my_reviewed_user_id = 42 reviews = Arel::Table.new(:reviews) reviews.where(reviews[:reviewed_user_id].eq(my_reviewed_user_id)).project(reviews[:stars].averagE).to_sql #=> "SELECT AVG(\"reviews\".\"stars\") AS avg_id FROM \"reviews\" WHERE \"users\".\"reviewed_user_id\" = 42"以上是大佬教程为你收集整理的ruby-on-rails-3 – 如何在使用`average()’时在AREL中使用`to_sql`?全部内容,希望文章能够帮你解决ruby-on-rails-3 – 如何在使用`average()’时在AREL中使用`to_sql`?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。