0

こんにちは、サプライヤーログインを使用して製品を追加しようとしました。spree マーケットプレイスに関連する 2 つの gem がインストールされています

gem 'spree_drop_ship', github: 'spree-contrib/spree_drop_ship', branch: '3-0-stable'
gem 'spree_marketplace', github: 'firman/spree_marketplace'

また、能力デコレーターを更新して、関連する権限を提供するようにしました

if user.has_spree_role? "supplier"
        can [:admin, :manage, :index, :create, :update], Spree::Product do |product|
          product.supplier_ids.include?(user.supplier_id)
        end
end

製品を追加するためのフォームは表示されますが、基本的な製品の詳細を追加して [作成] をクリックすると、Authorization Failureエラーが表示されます。問題を解決するにはどうすればよいかを提案してください。

更新: アプリをデバッグしたところ、いくつかの移行ファイルが欠落していることがわかりました。db を移行すると、spree_products に supply_id 列が表示されましたが、サプライヤー ログインを使用して新しい製品を追加すると、同じエラーが無許可としてスローされていました。確認しました。データベースでは、supplier_id 列はNULL.

正しいサプライヤー ID が spree_products に保存されるようにするには、どこを変更すればよいですか?

4

1 に答える 1

0

商品は作成されましたが、サプライヤーに関連付けられていません。その商品にはサプライヤーがいないため、編集時に認証エラーが発生します。

3-0-stableブランチを使用していますが、そのブランチには重要なメソッドがありません。2-4-stableブランチを見て、add_product_to_supplier メソッドを Spree::Admin::ProductsControllers にコピーしてください。

Spree::Admin::ProductsController.class_eval do
  create.after :add_product_to_supplier

  # Newly added products by a Supplier are associated with it.
  def add_product_to_supplier
    if try_spree_current_user && try_spree_current_user.supplier?
      @product.add_supplier!(try_spree_current_user.supplier_id)
    end
  end
end
于 2016-01-24T19:07:56.937 に答える