我的Ruby on Rails 4应用程序中有3个模型,如下所示:
user has_many orders
order_line belongs to order
在order_lines模型上,我有一个完整的标志。
在我的用户模型中,如何才能获得只有订单的条件,订单行的订单行没有完成?
我在我的用户模型上尝试过类似的东西:
has_many :orders, -> { include :order_lines, where :order_lines => { is_completed: false } }
如果尝试以上操作,我会收到错误:
syntax error, unexpected tSYMBEG, expecting keyword_do or '{' or '('
答案 0 :(得分:0)
要传递的选项是includes
而不是include
也没有方法链接发生。
尝试以下
has_many :orders, -> { includes(:order_lines).where(:order_lines => { is_completed: false }) }
答案 1 :(得分:0)
我认为更清洁的方法是在订单模型中添加范围。下面的代码可能对您有用,
class User < ActiveRecord::Base
has_many :orders
end
class Order < ActiveRecord::Base
belongs_to :user
has_many :lines
scope :incomplete, -> {
includes(:lines).
where("lines.is_completed = ?", false).
references(:lines)
}
end
class Line < ActiveRecord::Base
belongs_to :order
end
调用以获取用户不完整的订单,
user = User.first
user.orders.incomplete
另外,我认为如果列的名称是status:String或completed更好:boolean而不是is_complete。