如何使用 Rails 上的按钮更新所有用户的数据?

Posted

技术标签:

【中文标题】如何使用 Rails 上的按钮更新所有用户的数据?【英文标题】:How to update data for all users with a button on rails? 【发布时间】:2018-05-24 14:28:28 【问题描述】:

我有一些代码的索引视图:

所以我有我的用户模型。每个用户都有一个“准备就绪”列。 如果它 = 0,那么我显示“Ready”,=1“not ready”,=2“Unconfirmed” 每个用户都可以编辑自己的状态,管理员可以对所有用户的状态一一编辑。

但是如何显示一个按钮(仅适用于使用我的“current_user.admin?”方法的管理员)将所有用户的就绪单元格设置为 2(将所有用户设置为“未确认”)?就像,所有在同一时间。 现在只好一一点击设置就绪状态为2,不方便。 这是我的看法:

<% @user.each do |u| %>

<div class="<% if u.readyy == 2 %>unconfirmed <% end %> <% if u.readyy == 1 %>ready<% end %> <% if u.readyy == 0 %> not_ready<% end %>">

<%= u.name %>

<% if current_user %>
<% if current_user.id == u.id || current_user.admin? %>

<%= form_with(model: u) do |form| %>


<%= form.submit 'UPDATE STATE' %>

<% if current_user.admin? %>

<%= form.select :readyy, @readyyy # @readyyy =   unconfirmed: 2, ready: 1, not_ready: 0  %>

<% else %>

<%= form.select :readyy, @readyy #@readyy =   ready: 1, not_ready: 0  %>

<%end %>

<%end %>
<%end %>
<%end %>
<%end %>

【问题讨论】:

【参考方案1】:

我建议您查看用于状态管理的 aasm gem:https://github.com/aasm/aasm。这应该有效:

标记:

<%= button_to "Unconfirm users", unconfirm_all_users, method: :patch %>

路线:

resources :users do
  patch :unconfirm_all, on: :collection
end

控制器:

class UsersController < ApplicationController
  def unconfirm_all
    User.update_all(ready: 2)
    redirect_to users_path
  end
end

【讨论】:

你好,谢谢你的回答,我试过了,但是当我访问视图时它返回一个错误:'显示/home/otho/code/othocore/othocore/app/views/users/index .html.erb where line #3 raise: undefined local variable or method `unconfirm_all_users' for #:0x007fec01cf2f70> 你的意思是? unconfirm_all_users_url unconfirm_all_users_path' 添加 _path 到 unconfirm_all_users 并工作!谢谢你!!

以上是关于如何使用 Rails 上的按钮更新所有用户的数据?的主要内容,如果未能解决你的问题,请参考以下文章

Rails omniauth Google - 如何更新个人资料数据

rails,simple_form,保存后如何使用所选选项更新单选按钮?

使用 js/jquery 在 ruby​​ on rails 中隐藏 form_tag 上的提交按钮

如何禁用编辑和删除rails_admin?

如何在rails中销毁与登录用户相关的所有任务

如何使用flex在Rails上提交多个模型?