1

環境: Rails 3.2.13 + simple_form2.1.0 + CanCan 1.6.10 + など

モデルのサムネイル: Articles には作成者 ( Users) とComments があります。Comments は、s 内にネストされたリソースですArticle。モデルには、Commentコンテンツ、コメント投稿者 (現在ログインしているユーザー ID)、および記事 ID が含まれます。

問題: で新規作成するCommentArticleArticle当然ながら が更新されます。現在、CanCan のAbilityクラスはArticle、そのユーザーが更新できるように固定されています。ArticleComments —そしてそのフィールドのみ— が更新された場合、更新を許可するように制限したいと思います。pry何が更新されているかを知る方法を見つけようとして数時間ぶらぶらしてきましたが、これまでのところ空白を描いています。

モデルは、Michael Szyndel の質問に応えて、この Gistに投稿されています。

ヘルプ?

4

1 に答える 1

1

への依存に関連していると私が推測する 犯人を特定する代わりに、モデルにコールバックをaccepts_nested_attributes_for実装するという解決策を提供したいと思います。before_updateArticle

before_update :verify_update_authorization

# virtual attribute to supply CanCan a user candidate
def initiator
  @initiating_user if @initiating_user
end

def initiator=(user)
  @initiating_user = user
end

private

  def verify_update_authorization
    return false if Ability.new(initiator).cannot?(:update, self)
  end

更新が必要な場合、コントローラーはアーティクルの仮想属性を設定する必要があります。 この特定のケースでは、InheredResources update アクションをオーバーライドすることが適切です。

于 2013-06-17T15:45:08.937 に答える