Questions tagged «arel»

5
使用NOT NIL条件的Rails
使用rails 3样式,我将如何写相反的东西: Foo.includes(:bar).where(:bars=>{:id=>nil}) 我想找到id不为零的位置。我试过了: Foo.includes(:bar).where(:bars=>{:id=>!nil}).to_sql 但这返回: => "SELECT \"foos\".* FROM \"foos\" WHERE (\"bars\".\"id\" = 1)" 这绝对不是我所需要的,并且几乎就像是ARel中的错误。

8
想要在Rails中查找没有关联记录的记录
考虑一个简单的关联... class Person has_many :friends end class Friend belongs_to :person end 在Arel和/或meta_where中,让所有没有朋友的人最干净的方法是什么? 然后has_many:through版本呢? class Person has_many :contacts has_many :friends, :through => :contacts, :uniq => true end class Friend has_many :contacts has_many :people, :through => :contacts, :uniq => true end class Contact belongs_to :friend belongs_to :person end 我真的不想使用counter_cache-从我阅读的内容来看,它不适用于has_many:through 我不想拉所有的person.friends记录并在Ruby中遍历它们-我想要一个可以与meta_search gem一起使用的查询/范围 我不在乎查询的性能成本 …

8
合并两个ActiveRecord :: Relation对象
假设我有以下两个对象: first_name_relation = User.where(:first_name => 'Tobias') # ActiveRecord::Relation last_name_relation = User.where(:last_name => 'Fünke') # ActiveRecord::Relation 是否可以将两种关系结合在一起以产生一个ActiveRecord::Relation包含两个条件的对象? 注意:我知道我可以链接到哪里来获得这种行为,我真正感兴趣的是有两个单独的ActiveRecord::Relation对象的情况。

3
如何在Arel和Rails中进行LIKE查询?
我想做类似的事情: SELECT * FROM USER WHERE NAME LIKE '%Smith%'; 我在Arel中的尝试: # params[:query] = 'Smith' User.where("name like '%?%'", params[:query]).to_sql 但是,这变为: SELECT * FROM USER WHERE NAME LIKE '%'Smith'%'; Arel正确包装了查询字符串'Smith',但是因为这是LIKE语句,所以它不起作用。 如何在Arel中进行LIKE查询? PS奖金-我实际上是在尝试扫描表上的两个字段,包括名称和描述,以查看查询是否匹配。那将如何工作?

4
Rails 3.0中的Arel到底是什么?
我知道这是ActiveRecord的替代品,并且它使用对象而不是查询。 但... 为什么这更好? 对象/查询将更容易创建吗? 会导致更有效的SQL查询吗? 与所有主要数据库兼容吗?-我想会的。 使用存储过程会更容易/更难吗?

5
ActiveRecord中的子查询
使用SQL,我可以轻松地执行这样的子查询 User.where(:id => Account.where(..).select(:user_id)) 这将产生: SELECT * FROM users WHERE id IN (SELECT user_id FROM accounts WHERE ..) 如何使用Rails的3 activerecord / arel / meta_where做到这一点? 我确实需要/想要真正的子查询,没有红宝石的解决方法(使用几个查询)。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.