Railsで返信を既読にするボタンを追加しようとしています。私は現在このようなものを持っています。
# /app/models/ability.rb
...
can :manage, Reply, :user_id => user.id
...
load_and_authorize_resource
RepliesControllerにもあります
# /app/controllers/replies_controller.rb
class RepliesController < ApplicationController
load_and_authorize_resource
def update
@reply = Reply.find(params[:id])
@reply.isRead = true
if @reply.save
flash[:notice] = "Marked as ready."
flash[:alert] = params[:id]
redirect_to root_path
else
render :action => 'new'
end
end
ユーザーが返信を既読としてマークできるボタンがあります。
= button_to "Mark as read", idea_reply_path(reply.idea,reply), :method => "put"
問題は、ability.rb(上)で定義されている他のuser.id所有者からオブジェクトを更新しようとしているため、それを編集する権限がないことです。
このようなものを追加すると機能しますが、返信オブジェクト全体を管理する権限も他の人に与えます。
can :manage, Reply, :to_user_id => user.id
isRead?
user.idが。と一致するオブジェクトの属性のみをユーザーが管理できるようにする方法が必要ですto_user_id
。