1

親列の 1 つの値に基づいて、子レコードの配列をスコープしようとしています。「バンドル」カテゴリの商品に属するすべての ShoppingCartItems を見つけようとしています。

act_as_shopping_cart_gem を使用しようとしています

私のモデル。

ユーザー.rb

class User < ActiveRecord::Base
  has_many :shopping_carts, dependent: :destroy
end

ShoppingCart.rb

class ShoppingCart < ActiveRecord::Base
  acts_as_shopping_cart_using :shopping_cart_item
  belongs_to :user
  has_many :shopping_cart_items, dependent: :destroy
  has_many :products, through: :shopping_cart_items
end

Product.rb

class Product < ActiveRecord::Base
  has_many :shopping_cart_items,  dependent: :destroy
end

ShoppingCartItem.rb

class ShoppingCartItem < ActiveRecord::Base
  belongs_to :product,  dependent: :destroy

  scope :bundles,  ->  { 
    joins(:product).where('products.category = ?', 'Bundles') unless category.blank?
  }

end

このエラーが発生しています:

> undefined local variable or method `category' for
> #<Class:0x007fc0f40310d0>
4

3 に答える 3

1

あなたの問題は実際には簡単です-category変数を定義した場所はありません。

これは私がそれを行う方法です(一般化された範囲):

scope :by_category, lambda { |category|
  joins(:product).where(products: { category: category })
}

ステートメントがないことに注意してください。unlessカテゴリがスコープに渡されない場合、ArgumentError が発生します。

次に、任意のカテゴリのスコープを使用します。

ShoppingCartItem.by_category('Bundles')

空白のカテゴリがスコープに渡されないようにするには、正しい文字列を渡すようにしてください。カテゴリのドロップダウンを作成できます。

Product.pluck(:category)

または、ユーザー インターフェイスの一部である場合は、同様のもの。

于 2016-02-01T19:40:51.307 に答える
0

Categoryモデルを追加して、このリレーションを追加する必要があるかもしれません:

class Product < ActiveRecord::Base
  has_many :shopping_cart_items,  dependent: :destroy
  belongs_to :category
end
于 2016-02-01T19:44:10.323 に答える