如何从索引列表rails更新记录

时间:2015-08-15 19:21:02

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

我正在尝试通过点击“生成用户”按钮从一长串用户更新用户的状态,该按钮会将用户的“状态”从“管理员”更新为“用户”。但是,我使用的代码只会将第一个用户从“admin”更新为“user”,无论我按哪个按钮。

我认为错误发生在第一行更新中的控制器中。

如何让更新功能选择我点击“make user”并更新的记录,而不是列出的第一条记录?谢谢!

控制器

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 %>

1 个答案:

答案 0 :(得分:0)

您需要检查@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,如:<%= f.hidden_field :id, :value => user.id %>