【问题标题】:How to update records from an index list rails如何从索引列表更新记录
【发布时间】:2015-08-15 19:21:02
【问题描述】:

我正在尝试通过单击“创建用户”按钮从一长串用户中更新用户的状态,该按钮会将用户的“状态”从“管理员”更新为“用户”。但是,我使用的代码仅将第一个用户从“管理员”更新为“用户”,无论我按下哪个按钮。

我相信错误在控制器中,在更新的第一行。

如何使更新功能选择我单击“创建用户”的记录并更新它,而不是列出的第一条记录?谢谢!

控制器

def index
@user = User.find(params[:id])
end
def update
    @user = User.find_by(params[:id])
    @user.update_attributes(update_user_params)
    redirect_to '/dashboard/users'
end

问题一定出在 (params[:id]) 中。 表单代码

<% @user.each do |user| %>
              <tr id="dashfield">
                <td><%= user.first_name%></td>
                <td><%= user.last_name %></td>
                <td><%= user.email %></td>
                <td><%= user.role %></td>
                <td><%= form_for user, method: :put do |f|%>
                      <%= f.hidden_field :role, :value => 'user'%>
                      <%= f.submit 'Make User'%>
                  <%end%><%= form_for user, method: :put do |f|%>
                      <%= f.hidden_field :role, :value => 'admin'%>
                      <%= f.submit 'Make Admin'%>
                  <%end%></td>
              </tr>
          <% end %>

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4.1


    【解决方案1】:

    你需要检查@hour是否存在,然后你可以更新

    def update
        @user = User.find_by(params[:id]) if params[:id].present?
        if @hour.present?
         @user.update_attributes(update_user_params)
         redirect_to '/dashboard/users'
        end
     end
    

    你必须先检查所有可能的故障。

    编辑: 您可以设置用户 ID,例如:&lt;%= f.hidden_field :id, :value =&gt; user.id %&gt;

    【讨论】:

    • 我怎样才能使表单功能仅适用于它所在的记录?因为它仍然只编辑数据库中的第一条记录
    • 对不起,我发布了错误的控制器,但它是相同的,具有不同的标签
    • 在您的表单中,您需要使用隐藏字段设置用户 ID。我看到了您的表单,但没有定义用户 ID。
    • 是的,但是在您的表单中,您需要使用隐藏表单打印 id,并将其发送给控制器。因为你的控制器不知道你的信息是什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-07
    • 2021-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多