Rails渴望装载和条件

时间:2011-10-11 10:17:26

标签: eager-loading conditional-statements ruby-on-rails-2

我设置了以下关联

class bookinghdr
  belongs_to :agent
end

class bookingitem
  belongs_to :bookinghdr, :include => agent
end

所以我希望能够做到以下几点:

named_scope :prepay, :include=>["bookinghdr"], :conditions => ["bookinghdr.agent.agenttype = 'PP'"]

并在我的控制器中执行:

b = Bookingitem.prepay

但是这给了我一个ActiveRecord :: StatementInvalid:Mysql :: Error:未知列'bookinghdr.agent.agenttype'

但是,如果我不包含条件条款,那么我会得到一个记录集,我可以这样做:

b = Bookingitem.prepay
b[0].bookinghdr.agent.agenttype 

没有任何错误!

我不想获取所有记录然后迭代它们以找到其代理具有'PP @标志的那些记录。我希望AR能为我做到这一点。

有人对如何实现这一点有任何想法吗?

1 个答案:

答案 0 :(得分:1)

您的问题表明您尚未完全了解关联和命名范围的工作原理。由于我无法从您的问题中分辨出哪些部分不清楚,我建议您阅读http://guides.rubyonrails.org/v2.3.11/association_basics.html处的协会基础知识指南。这可以让您快速了解您想要实现的概念。阅读完指南后,它应该都有意义。