我正在使用名为 acts_as_commentable_with_threading
的 gem它会自动创建注释表,其中有这些列,例如commentable_type
,commentable_id
等。
它是多态的,并且工作正常。
我有这三个模型。
- 用户
- 社区
- 主题
他们在每个评论下都有评论。
我想让用户删除他的评论或其他人在他的用户页面上的评论。
(他可以删除用户页面上的所有评论)
我想出让它启用以下代码的编码。
但我发现同样的事情也会发生在社区页面和主题页面上。
即使用户不是评论的原始创建者,如果社区/主题的ID与用户ID相同,他也可以删除所有评论。
我只喜欢它启用用户模型。 如何自定义?
模型/能力.rb
can [:create, :destroy], Comment, {:user_id => user.id}
can [:destroy], Comment, {:commentable_id => user.id}
由于您Comment
类使用多态关联,因此当前允许delete
操作,当commentable_id
与用户的id
匹配时。由于不同表中可能存在冲突的 ID,因此还需要在commentable_type
上进行匹配。尝试这样的事情:
can [:destroy], Comment, {:commentable_id => user.id, :commentable_type => user.class.name}