【发布时间】:2013-02-14 23:20:33
【问题描述】:
Rails 的新手,正在构建电子商务系统。
我有一个树状的产品结构 -> skus -> line_items
地点:
class LineItem < ActiveRecord::Base
belongs_to :sku
belongs_to :cart
class Sku < ActiveRecord::Base
belongs_to :product
class Product < ActiveRecord::Base
has_many :skus
has_many :line_items, :through => :skus
Product 模型有一个布尔字段,用于确定特定产品是否需要许可证。
将多个 line_items 添加到购物车中,这样:
@cart.line_items
返回一个订单项数组。
在订单阶段,我需要确定是否有任何订单项需要许可证,如果需要,显示许可证以供接受。
我尝试过链接范围:
class LineItem < ActiveRecord::Base
scope :license?, joins(:sku) & Sku.license?
class Sku < ActiveRecord::Base
scope :license?, joins(:product) & Product.license?
class Product < ActiveRecord::Base
scope :license?, where(:license => true)
@cart.line_items.license?
即使@cart.line_items 包含 product.license 为 true 的项目,也会产生一个空数组。
我试过了:
@cart.line_items.joins(:sku).joins(:product).where(:license => true)
它返回一个 ActiveRecord::Relation,但是
@cart.line_items.joins(:sku).joins(:product).where(:rct => true).empty?
@cart.line_items.joins(:sku).joins(:product).where(:rct => true).to_a
@cart.line_items.joins(:sku).joins(:product).where(:rct => true).all
在后两种情况下都不能给出布尔值(在第一种情况下)或数组。
我可以循环遍历:
<% @cart.line_items.each do |item| %>
<h4><%= item %></h4>
<h4><%= item.sku.product.license %></h4>
<% end %>
并查看所有正确的布尔值,但必须有更好的方法来执行此操作,而不是在我的订单视图中使用此循环的变体,或者必须创建一个类方法来循环并生成布尔值。
有什么想法吗?
【问题讨论】:
标签: ruby-on-rails activerecord relation