gpt4 book ai didi

ruby-on-rails - 让用户使用 CanCan 和 Devise 更新自己的帖子

转载 作者:行者123 更新时间:2023-12-04 18:22:12 24 4
gpt4 key购买 nike

我正在使用 设计和CanCan 管理用户和用户权限。
我想要的是:普通用户应该可以更新自己的帖子 .
最重要的模型称为事件。

在我为普通成员(member)提供的能力模型中:

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

(感谢 Yuriy Goldshtrakh 提供第三行的语法)

在事件的索引 View 中,我有:
<% 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 %>

这有效:它只显示 更新和删除链接 , 如果 Activity 是由当前成员创建的。

但是,如果成员更新事件,则不会保存更改并且不会将成员发送回事件 - 因为他/她应该在成功更新之后。

这是事件 Controller 中的更新操作:
  # 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

结尾

问题是:为什么事件没有正确更新?
我很感激所有的想法!

最佳答案

交换 ActivitiesController#update 的第 1 行和第 3 行

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

authorize! :update, @activity
...
end

您也可以使用 the preferred way with Cancan : load_and_authorize_resource

关于ruby-on-rails - 让用户使用 CanCan 和 Devise 更新自己的帖子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10419598/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com