0

私は、acts_as_commentable_with_threading
コメントテーブルを自動的に作成するというgemを使用しています。このテーブルには、、、 などcommentable_typeの列があります。commentable_id

多形になっているので、問題なく動作しています。

私はこれらの3つのモデルを持っています。

  • ユーザー
  • コミュニティ
  • トピック

それぞれの下にコメントがあります。

ユーザーが自分のユーザーページにある自分のコメントまたは他の誰かのコメントを削除できるようにしたいと思います。
(彼は自分のユーザーページのすべてのコメントを削除できます)

以下のコードのようなコーディングを可能にすることを考えました。
しかし、コミュニティページとトピックページでも同じことが起こることがわかりました。
ユーザーがコメントの元の作成者でなくても、コミュニティ/トピックのIDがユーザーIDと同じである場合、ユーザーはすべてのコメントを削除することができます。

私はそれがUSERモデルを有効にすることだけが好きです。どうすればこれをカスタマイズできますか?

models /ability.rb

can [:create, :destroy], Comment, {:user_id => user.id}
can [:destroy], Comment, {:commentable_id => user.id}
4

1 に答える 1

1

Commentクラスはポリモーフィックな関連付けを使用しているため、現在、ユーザーのと一致するdelete場合にアクションが許可されます。異なるテーブル間でIDが競合する可能性があるため、も一致する必要があります。次のようなものを試してください。commentable_ididcommentable_type

can [:destroy], Comment, {:commentable_id => user.id, :commentable_type => user.class.name}
于 2013-01-21T21:36:36.390 に答える