【发布时间】:2020-04-26 10:09:29
【问题描述】:
我有三个模型类:PatientBoard、Medication 和 Customer,它们相互关联如下:
病人委员会
associations do
has_and_belongs_to_many :customers
has_many :medications
end
药物
associations do
belongs_to :patient_board
end
客户
associations do
has_many :patient_boards
end
由于has_and_belongs_to_many 关系,我的 patient_board 对象如下所示:
{
_id: ObjectId("5e160f235eb3607d57f59341"),
name: "test",
customer_ids: [ObjectId("5db1e6f45eb36059a4d98e7f")]
}
有权访问该患者委员会的所有客户的 id 将位于 customer_ids 数组中。
问题
在尝试为用户设置权限时,我对PatientBoard 进行了如下操作:
can :manage, PatientBoard do |pb|
pb.customer_ids.include? user.id
end
它在大多数情况下都有效。但是create 方法还是不行,所以我也必须插入以下行:
can :create, PatientBoard
现在它可以正常工作了,但是当我尝试对 Medication 做同样的事情时它没有工作:
can :manage, Medication do |m|
m.patient_board.customer_ids.include? user.id
end
它抛出这个错误信息:
accessible_by 调用不能与块“can”定义一起使用。无法确定 :index 药物的 SQL
所以我尝试这样做:
can :manage, Medication, patient_board: { customers: { id: user.id } }
这样就不会再显示错误消息,但药物也不会显示。当尝试创建一种新药物时,它会抛出该错误:
未定义的方法“匹配?”对于#PatientBoard:0x007f663c38d0e8 你是说什么? _火柴?匹配器
我认为这是有道理的,因为它试图将字符串值 (user.id) 与数组值 (customer_ids) 进行比较
在简历中
如何使用 CanCanCan 的条件哈希检查 user.id 是否在 customer_ids 数组中?
【问题讨论】:
标签: ruby-on-rails ruby mongodb mongoid cancancan