Railsはかなり新しく、eコマースシステムを構築しています。
私は製品のツリーのような構造を持っています->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
製品モデルには、特定の製品にライセンスが必要かどうかを決定するブールフィールドがあります。
複数の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 :: Relationshipを返しますが、
@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
すべてがブール値(最初のケース)または配列(次の2つのケース)のいずれかを与えることに失敗します。
私はループすることができます:
<% @cart.line_items.each do |item| %>
<h4><%= item %></h4>
<h4><%= item.sku.product.license %></h4>
<% end %>
正しいブール値をすべて表示しますが、注文ビューでこのループのバリエーションを使用するか、ループしてブール値を生成するクラスメソッドを作成するよりも、これを行うためのより良い方法が必要です。
何か案は?