2012-05-02 6 views
2

私はDeviseとCanCanを使用してユーザーとユーザー権利を管理しています。 私が欲しいもの:普通のユーザーはが自分の投稿を更新できるようになります。 最も重要なモデルはアクティビティと呼ばれます。通常のメンバーのために私が持っている能力は、モデルでCanCanとDeviseで自分の投稿を更新させる

elsif user.role? :Member 
    can :read, :all 
    can :create, :all 
    can :manage, Activity, :user_id=>user.id 

(第3ラインの構文については、ユーリーGoldshtrakhのおかげで)

活動の指標を考慮して、私が持っています:

<% if can? :update, activity %> 
<br /> 
<%= link_to 'Update', edit_activity_path(activity) %> 
<% end %> 

<% if can? :delete, activity %> 
<%= link_to 'Delete', activity, :confirm => 'Really?', :method => :delete %> 

<% end %> 

これは動作します:活動は、現在のメンバーによって作成された場合にのみ、更新、削除、リンクを示しています。

ただし、メンバーがアクティビティを更新した場合、変更は保存されず、メンバーはアクティビティに返されません。更新が成功した後である必要があります。ここで

が活動コントローラで更新アクションです:

# PUT /activities/1.xml 

はデフ

authorize! :update, @activity 

@activity = Activity.find(params[:id]) 

respond_to do |format| 
    if @activity.update_attributes(params[:activity]) 
    format.html { redirect_to(@activity, :notice => 'Activity was successfully updated.') } 
    format.xml { head :ok } 
    else 
    format.html { render :action => "edit" } 
    format.xml { render :xml => @activity.errors, :status => :unprocessable_entity } 
    end 
end 

エンド

を更新質問です:活動IST正しく更新されないのはなぜ? 私はすべてのアイデアに感謝しています! load_and_authorize_resource

答えて

3

スワップライン1と3を行うことができますたとえば能力:

if user.role?(:author) 
     can :create, Article 
     can :update, Article do |article| 
      article.try(:user) == user 
     end 
     end 

このチュートリアルで試してください:Railscasts CanCan 多分お手伝い

+0

あなたは正しいです!それがうまくいかなかった理由はそのためです。どうもありがとう! –

1

場合、あなたはまた、the preferred way with Cancan使用することができActivitiesController#update

def update 
    @activity = Activity.find(params[:id]) 

    authorize! :update, @activity 
    ... 
end 

のこの

can :manage, [Post,Comment], :user_id=>user.id 
0

:あなたの記事やコメントがユーザーに属する

関連する問題