在rails中更新用户详细信息时请求被拒绝

问题描述 投票:1回答:1

我是铁杆上的红宝石新手。

我有两种类型的用户管理员和用户。管理员可以创建编辑和销毁用户。我没有创建和销毁的问题,并且很容易实现。

我在控制器中使用了以下代码,

private

def allowed_params
    params.require(:user).permit(:role_id, :email, :password, :password_confirmation, :fname, :lname)
end 

定义创建用户时所需和允许的参数。

用户创建

def save_user
    @user = User.new(allowed_params)
    if @user.save
        redirect_to list_users_path
    else
        render 'add_user'
    end
end

用户更新

def update_user
    @user = User.find(params[:id])
    if @user.update_attributes(allowed_params)
        redirect_to list_users_path
    else
        render 'edit_user'
    end
end

视图

<div class="container">
  <div class="row">
    <div class="col-md-12">
    <%= link_to "Admin Dashboard", admin_dashboard_path, :class=>'pull-left' %>
      <%= form_for @user, :url => update_user_path do |f| %>
        <div class="row">
          <div class="col-md-12 field">
            <div class="col-md-3">
              <h2 style="text-align: center;">Edit User Details</h2>
            </div>
          </div>
        </div>
        <div class="row">
          <div class="col-md-12 field">
            <div class="col-md-3">
              <%= f.label :fname, 'First Name' %><br />
              <%= f.text_field :fname, :class => 'form-control' %>
              <p class="error"><%= show_errors(@user, :fname) %></p>
            </div>
          </div>
        </div>
        <div class="row">
          <div class="col-md-12 field">
            <div class="col-md-3">
              <%= f.label :lname, 'Last Name' %><br />
              <%= f.text_field :lname, :class => 'form-control' %>
              <p class="error"><%= show_errors(@user, :lname) %></p>
            </div>
          </div>
        </div>

        <div class="row">
          <div class="col-md-12 field">
            <div class="col-md-3">
                <%= f.label :email, 'Email' %><br />
                <%= f.text_field :email, :class => 'form-control' %>
                <p class="error"><%= show_errors(@user, :email) %></p>
            </div>
          </div>
        </div>
        <div class="row">
          <div class="col-md-12 field">
            <div class="col-md-3" style="text-align: center">
              <%= f.submit "Update User", :class => 'btn btn-sm btn-primary' %>
            </div>
          </div>
        </div>
      <% end %>
    </div>
  </div>
</div>

当我只传递fname,lname和email时没有发生任何事情。我需要更新用户详细信息,我该怎么办?

任何建议表示赞赏。

ruby-on-rails ruby
1个回答
0
投票

有一种调试方式。

  1. 您应该以开发模式启动服务器。然后通过tail -f log/development.log检查终端中development.log文件的更改。
  2. 然后执行您想要的操作,例如在更改fname或其他字段时单击“提交”按钮。
  3. 然后专注于第1步获得的信息。您可以获得: A. which Controller and action handled the request B. The parameters of this request. C. The log of SQLs excuted by DB D. The response status 检查是否正确的控制器?或正确的参数?或者SQL已经被执行了?另外,我们在调试时习惯了@user.update_attributes!(allowed_params)。当某些东西违反了模型(用户)中定义的规则时,需要更多的信息。
© www.soinside.com 2019 - 2024. All rights reserved.