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
感謝。
我還是弄不明白
有人請幫幫我。
謝謝您的回答。在我做了你所說的之後,我得到了這樣的錯誤。 ' 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
可否請你提供'index'動作的代碼? – rony36
我解決了這個問題,你會再看一次嗎? – ccoeder