Rails ActiveAdmin:ActiveRecord::RecordNotFound 在 Admin::UsersController#show
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
Couldn't find User with '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>
我想在活动管理员显示操作中创建按钮以将用户 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
bin/rails routes
update_status_admin_users POST /admin/users/update_status(.:format) admin/users#update_status
我没有更新数据,而是收到错误:
ActiveRecord::RecordNotFound in Admin::UsersController#show Couldn't find User with '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>