カンカンでスプリーの管理/注文サイトを変更しようとしています。私の店では、製品はさまざまなベンダーから販売されています。登録ユーザーにはがありvendor_id
、製品にもがありvendor_id
ます。注文が行われると、LineItem
注文からのaにはが含まれるため、が含まれProduct
ますvendor_id
。
私が達成したいのは、ユーザーがログインして管理パネルの注文ページにアクセスすると、自分の製品が注文された注文しか表示されないということです。ユーザーは、他のベンダー/ユーザーからの他の注文を見るべきではありません。
私はいくつかの能力を設定することによってCanCanでこれをやろうとしました:
def initialize(user)
if user.has_spree_role?("shop_manager") && !user.vendor.nil?
can :admin, Spree::Order
can :index, Spree::Order, :line_items => { :product => { :vendor_id => user.vendor_id } }
can :show, Spree::Order, :line_items => { :product => { :vendor_id => user.vendor_id } }
can :manage, Spree::LineItem, :product => { :vendor_id => user.vendor_id }
can :read, Spree::Order
end
end
ご覧のとおり、ユーザーはインデックスページのwhereでのみ注文を表示し、whereのみ:line_items => { :product => { :vendor_id => user.vendor_id } }
を表示する必要があります。LineItems
:product => { :vendor_id => user.vendor_id }
しかし、私が得た振る舞いは、注文のインデックスページを表示する権限がないということであり、すべてLineItem
が注文の表示アクションで表示されます。
2番目のタスクでは、ビューを変更することをお勧めします。私はスプリーコアからを変更しようとし_order_details.html.erb
、すべてが表示されるループを変更しましたLineItems
:
<% @order.line_items.accessible_by(@current_ability).each do |item| %>
しかし、これは私にUninitialized constant Product
(私はそれがあるべきだと思いますSpree::Product
)を与えます。だから、私は何をすべきかわからない、インデックスのために、またはでのショーアクションのためにLineItems
。誰かがアイデアを持っていることを願っています。