如何解决Rails ActiveAdmin: ActiveRecord::RecordNotFound in Admin::UsersController#show
我想创建按钮以在活动管理显示操作中将用户 status:string
从 inactive
更改为 active
。为此,我将 collection_action
与以下代码一起使用:
ActiveAdmin.register User do
permit_params :email,:password,:password_confirmation,:status
collection_action :update_status,method: :post do
user.update!(status: 'active')
redirect_to user_path,notice: 'User status updated'
end
然后我呈现自定义部分 _show.html.erb
<tr>
<td colspan='2'>
<% if @user.status == 'inactive' %>
<%= link_to 'Activate user',update_status_admin_users_path %>
<% end %>
</td>
以下是 collection_action
动态生成的 ActiveAdmin
bin/rails routes
update_status_admin_users POST /admin/users/update_status(.:format) admin/users#update_status
我收到了一个错误,而不是更新数据:
ActiveRecord::RecordNotFound in Admin::UsersController#show 找不到“id”=update_status
的用户解决方法
上述错误是因为您要重定向到需要重定向的 user_path
参数的 id
,并且在您使用 collection_action 时 id
参数丢失。
如果您只想更新一位用户,请使用 member_action
而不是 collection_action
。
- 使用
resource
member_action : update_status,method: :put do
resource.update!(status: 'active')
redirect_to user_path,notice: 'User status updated'
end
- 有自己的发现者
member_action : update_status,method: :put do
user = User.find(params[:id])
user.update!(status: 'active')
redirect_to user_path,notice: 'User status updated'
end
<td colspan='2'>
<% if @user.status == 'inactive' %>
<%= link_to 'Activate user',update_status_admin_user_path,method: :put %>
<% end %>
</td>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。