Tag: arel

如何在Rails 3中订购包含的元素

我有一个模型关系, today有许多tasks 我试图检索用户的today对象,包括tasks并把它们都呈现给Json。 所有这一切都很好,直到我决定我想要在today对象内tasks ,因为respond_with block也用于渲染html页面。 有什么办法可以包括这些tasks并订购? 我正在尝试这样的事情: class TodaysController < ApplicationController respond_to :html, :json def show @today = Today.where(:user_id => current_user.id).joins(:tasks).includes(:tasks).order(:priority).first respond_with @today, :include => :tasks end end 这检索正确的一切,但似乎并没有sorting的任务。 这是我曾经有过的(工作很好,但没有sorting): class TodaysController < ApplicationController respond_to :html, :json def show @today = current_user.today respond_with @today, :include => :tasks end end 我知道我可以检索数据,并按照如下方式进行sorting: @today = current_user.today @today.tasks.sort!{|a,b| […]

如何覆盖:在has_many中定义的顺序

我有 class Authors has_many :books, :order => 'name ASC' 我正试图查询按名称DESCsorting的所有书籍 Authors.books.order('name DESC') 但结果是 SELECT * FROM …. ORDER BY name ASC, name DESC 结果返回与名称sortingASC 有没有办法删除关联中的原始顺序或重写它? 或者是在关系中指定一个不好的主意? 使用Rails 3.0.3

如何在Rails3中使用unscoped关联关系?

由于信息安全的限制,我有一个默认的产品范围。 class Product < ActiveRecord::Base has_many :photos default_scope where('visible = 1') end 然而,在我的相关照片模型中,我也必须find不应该可见的产品。 class Photo < ActiveRecord::Base belongs_to :product end my_photo.product 在其他情况下,我可以使用unscoped来绕过default_scope,例如在Product.unscoped.find_by_title('abc') 。 然而: 使用logging关联时如何删除范围? my_photo.unscoped.product没有意义,因为my_photo没有名为unscoped的方法。 my_photo.product.unscoped也没有意义,因为my_photo.product可能已经是零。

你如何在Rails 3中使用ActiveRecord关联?

我有一个Rails 3项目。 随着Rails 3来到Arel和重用一个范围来build立另一个范围的能力。 我想知道是否有一种方法来定义关系时使用范围(例如“has_many”)。 我有logging有许可列。 我想build立一个default_scope,考虑到我的权限列,以便logging(即使是通过关系访问的)被过滤。 目前,在Rails 3中,default_scope(包括我发现的补丁)没有提供传递proc(我需要用于后期variables绑定)的可行方法。 有没有可能定义一个has_many命名的作用域可以传递给哪个? 重用命名作用域的想法如下所示: Orders.scope :my_orders, lambda{where(:user_id => User.current_user.id)} has_many :orders, :scope => Orders.my_orders 或者在关系中隐式编码该命名范围将如下所示: has_many :orders, :scope => lambda{where(:user_id => User.current_user.id)} 我只是试图通过后期绑定来应用default_scope。 我宁愿使用Arel方法(如果有的话),但会使用任何可行的选项。 由于我指的是当前用户,我不能依赖于在最后时刻未被评估的条件,比如: has_many :orders, :conditions => ["user_id = ?", User.current_user.id]

Arel在Rails 3.0中究竟是什么?

我知道它是ActiveRecord的替代品,它使用对象而不是查询。 但… 为什么这更好? 将对象/查询“更容易”创build? 会导致更有效的SQL查询? 它将与所有主要数据库兼容吗? – 我认为会的。 使用存储过程会更容易吗?

合并两个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对象? 注意:我知道我可以链接wheres得到这个行为,我真正感兴趣的是我有两个单独的ActiveRecord::Relation对象的情况。

想要在Rails 3中find没有关联logging的logging

考虑一个简单的关联… class Person has_many :friends end class Friend belongs_to :person end 让所有在ARel和/或meta_where中没有朋友的人最干净的方法是什么? 然后呢怎么样has_many:通过版本 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:通过 我不想拉所有的person.friendslogging,并在Ruby中通过它们循环 – 我想有一个查询/范围,我可以使用meta_searchgem 我不介意查询的性能成本 而离实际的SQL越远越好…

activerecord中的子查询

随着续集,我可以很容易地做这样的子查询 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? 我确实需要/想要真正的子查询,没有ruby解决方法(使用几个查询)。

Rails条件使用NOT NULL

使用导轨3样式我将如何写相反的: Foo.includes(:bar).where(:bars=>{:id=>nil}) 我想findid不是null的地方。 我试过了: Foo.includes(:bar).where(:bars=>{:id=>!nil}).to_sql 但是,这返回: => "SELECT \"foos\".* FROM \"foos\" WHERE (\"bars\".\"id\" = 1)" 这绝对不是我所需要的,几乎就像ARel中的一个bug。

ActiveRecord Arel OR条件

你怎么能结合2个不同的条件使用逻辑OR而不是AND? 注意: 2个条件是作为rails范围生成的,不能直接更改为where("x or y") 。 简单的例子: admins = User.where(:kind => :admin) authors = User.where(:kind => :author) 应用AND条件很容易(对于这个特殊的情况是毫无意义的): (admins.merge authors).to_sql #=> select … from … where kind = 'admin' AND kind = 'author' 但是,怎样才能生成以下具有2种不同的Arel关系的查询呢? #=> select … from … where kind = 'admin' OR kind = 'author' 看来( 根据Arel自述 ): OR运算符尚不支持 但我希望它不适用于此,并希望写下如下内容: (admins.or authors).to_sql