0

我有嵌套的資源,我想允許部門/ 1 /列表,公司/ 1 /列表和繼續,我該怎麼做?順便說一句,進出口使用導軌5和cancancan 2.0cancancan多態關聯能力(has_many)

這裏是我的文件:

的routes.rb

resources :departments do 
    resources :lists 
    end 

    resources :lists do 
    member do 
     put :done 
    end 
    end 

    devise_for :users, :skip => [:registrations] 

    devise_scope :user do 
    root to: "devise/sessions#new" 
    get "https://stackoverflow.com/users/edit" => "devise/registrations#edit", :as => :edit_user_registration 
    patch "/users" => "devise/registrations#update", :as => :user_registration 
    put "/users" => "devise/registrations#update" 
    end 

    resources :users do 
    resources :lists 
    end 

    resources :companies do 
    resources :lists 
    end 

list.rb

class List < ApplicationRecord 
     belongs_to :listable, polymorphic: true 
    end 

department.rb

class Department < ApplicationRecord 
    has_many :lists, as: :listable 
end 

company.rb

class Company < ApplicationRecord 
    has_many :lists, as: :listable 
end 

lists_controller.rb

class ListsController < ApplicationController 
    load_resource :department 
    load_resource :company 
    load_resource :user 
    load_and_authorize_resource :list, :through => [:department, :company, :user] 

ability.rb

class Ability 
    include CanCan::Ability 

    def initialize(user) 
    user ||= User.new 

    if user.has_role? :admin 
     can :manage, :all 
    else 
     can :read, List, { :company => { :id => user.company_id } } 
     can :read, List, { :department => { :id => user.departments.first.id } } 
    end 
    end 
end 

感謝。

我還是弄不明白

有人請幫幫我。

回答

0

嘗試:

class ListsController < ApplicationController 
    load_resource :department 
    load_resource :company 
    load_resource :user 
    load_and_authorize_resource :list, :through => [:department, :company, :user] 
end 

lists,這將是list :)

+0

謝謝您的回答。在我做了你所說的之後,我得到了這樣的錯誤。 ' ListsController中的NoMethodError#index 未定義的方法'klass'for nil:NilClass if value.is_a? Hash value = value.dup association_class = model_class.reflect_on_association(name).klass.name.constantize nested_resulted = value.each_with_object({})do |(k,v),嵌套| 如果v.is_a?哈希 value.delete(k) ' 你能幫我嗎? – ccoeder

+0

可否請你提供'index'動作的代碼? – rony36

+0

我解決了這個問題,你會再看一次嗎? – ccoeder