“where”查询使用类似HQL的语法?

时间:2012-09-16 18:45:26

标签: ruby-on-rails ruby-on-rails-3 activerecord

我是Hibernate的HQL语法的粉丝,它允许我形成遍历模型关系的查询,例如:

from Book book where book.publisher.lastName = 'jones'
from Book book where book.chapters.length = 2

是否有用于遍历此类模型的ActiveRecord语法?

1 个答案:

答案 0 :(得分:1)

我认为与ARel最接近的是:

Book.joins(:publisher).where('publishers.lastName = ?', 'Jones')

Book.where(:publisher_id => Publisher.where(:last_name => 'Jones'))

(可能效率较低,因为它会两次击中数据库而不是一次)

Book.joins(:chapters).group('books.id').having('count(chapters) = ?', 2)

我承认它的可读性稍差。

有一些宝石,Squeel是我想到的,它可以让你以各种方式改变你的查询语法 - 它们中的一个可能会感觉更接近你想要的使用