是否可以在rails 3.1中的has_many,:through关系上设置实例级约束?
http://guides.rubyonrails.org/association_basics.html#the-has_many-association
类似的东西:
Class A
has_many :c, :through => :b, :conditions => { "'c'.something_id" => @a.something_id }
文档给了我这个希望,但它对我不起作用:
如果需要在运行时动态评估条件,则可以 在单引号中使用字符串插值:
class Customer < ActiveRecord::Base
has_many :latest_orders, :class_name => "Order",
:conditions => 'orders.created_at > #{10.hours.ago.to_s(:db).inspect}'
end
这让我在rails 3.1上获得了“无法识别的标记'#'”。想知道这个功能是否不再起作用了吗?
编辑
想澄清为什么我认为范围不是解决方案。我希望能够从具有条件的所有C的实例中获取(基于该实例的A的属性)。这些是唯一应该与A相关联的C。要使用范围执行此操作,我会在C上放置一个带有参数的范围,然后必须从@a调用它有一些值吗?我不明白为什么这比直接将它合并到我的has_many查询中更好。
答案 0 :(得分:2)
在orders
型号上使用范围:
class Order < ActiveRecord::Base
belongs_to :customer
scope :latest, lambda { where('created_at > ?', 10.hours.ago) }
end
然后用:
来调用它@customer.orders.latest
如果您真的想使用latest_orders
,则可以将其添加到Customer模型中:
def latest_orders
orders.where('created_at > ?', 10.hours.ago)
end