我在用户和客户端之间有has_and_belongs_to_many关联。表clients_users有用户和客户端的索引。 我的模特是:
class User < ActiveRecord::Base
rolify
has_and_belongs_to_many :clients
end
class Client < ActiveRecord::Base
resourcify
has_and_belongs_to_many :users
end
我的控制器是:
class Admin::ClientsController < ApplicationController
load_and_authorize_resource
end
class Admin::UsersController < ApplicationController
load_and_authorize_resource
end
我的能力需要这样的东西.rb
user ||= User.new # guest user (not logged in)
can :read, :all
can :manage, Client, :clients_users => { :user_id => user.id }
因此,只有在clients_users表中是具有user_id和此客户端ID的记录时,我才能管理客户端。我如何使它工作?
答案 0 :(得分:4)
当您使用has_and_belongs_to_many
时,您无权访问连接模型,只是因为没有连接模型,如果您想访问它,那么您需要执行has_many :through
。
但在您的情况下,您实际上并不需要访问联接模型,因为Client
具有users
属性,User
具有clients
属性,因此为什么不用它呢:
我认为这样的事情应该有效
can :manage, Client, id: user.clients.pluck(:id)