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

时间:2018-03-21 13:31:24

标签: ruby-on-rails ruby

我是铁轨上的红宝石。

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

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

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时没有发生任何事情。我需要更新用户详细信息,我该怎么办?

任何建议都表示赞赏。

1 个答案:

答案 0 :(得分: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)。当某些东西违反了模型(用户)中定义的规则时,需要更多的信息。

相关问题