Ruby on rails 未更新ruby on rails记录

Ruby on rails 未更新ruby on rails记录,ruby-on-rails,ruby,activerecord,devise,Ruby On Rails,Ruby,Activerecord,Devise,我在我的项目中使用Desive,我想从我的管理面板更新其他人的配置文件,因此只有具有管理角色的用户才能访问它,因为此行为与默认Desive非常不同,我决定创建一个单独的控制器,以便我可以将用户作为正常记录进行操作,但由于某些原因,当我更新用户时,记录不会更新到数据库中 这是我的路线 devise_for :users, controllers: { registrations: 'users/registrations' } root "users#index" post "user

我在我的项目中使用Desive,我想从我的管理面板更新其他人的配置文件,因此只有具有管理角色的用户才能访问它,因为此行为与默认Desive非常不同,我决定创建一个单独的控制器,以便我可以将用户作为正常记录进行操作,但由于某些原因,当我更新用户时,记录不会更新到数据库中

这是我的路线

  devise_for :users, controllers: { registrations: 'users/registrations' }
  root "users#index"
  post "users/:id" => "users#show"
  get "users/:id" => "users#show", as: :user
  patch "users/:id" => "users#show"
  resources :receipts
  resources :notes

  get "users/edit/:id" => "users#edit", as: :edit_user 
这是我的控制器

def edit
    @user = User.find(params[:id])
end

def update
    user = User.find(params[:id])
    user.update(user_update_params)
    redirect_to user
end

private
    def user_update_params
        params.require(:user).permit(:username, :names, :last_names, :guardian, :phone, :identification, :role)
    end

    def user_params
        if @user.debts.nil?
            params.require(:user).permit(:debts)
        else
            params.require(:user).permit(:add_debt)
        end
    end
这是我的看法

<% if current_user && current_user.has_role?(:admin) %>

  <div class="container form-bg">
        <div class="row main">
          <div class="panel-heading">
                   <div class="panel-title text-center">
                        <h1 class="title">Editar usuario</h1>
                      <hr />
                    </div>
                </div>
          <div class="main-login main-center">

            <%= form_for @user do |f| %>

              <div class="form-group">
                <%= f.label :username, "Usuario" ,class: "cols-sm-2 control-label" %><br />
                <div class="cols-sm-10">
                  <div class="input-group">
                    <span class="input-group-addon"><i class="fa fa-user fa" aria-hidden="true"></i></span>
                    <%= f.text_field :username, autofocus: true, class: "form-control" %>
                  </div>
                </div>
              </div>

              <div class="form-group">
                <%= f.label :names, "Nombres" ,class: "cols-sm-2 control-label" %><br />
                <div class="cols-sm-10">
                  <div class="input-group">
                    <span class="input-group-addon"><i class="fa fa-user fa" aria-hidden="true"></i></span>
                    <%= f.text_field :names, autofocus: true, class: "form-control" %>
                  </div>
                </div>
              </div>


              <div class="form-group">
                <%= f.label :last_names, "Apellidos" ,class: "cols-sm-2 control-label" %><br />
                <div class="cols-sm-10">
                  <div class="input-group">
                    <span class="input-group-addon"><i class="fa fa-user fa" aria-hidden="true"></i></span>
                    <%= f.text_field :last_names, autofocus: true, class: "form-control" %>
                  </div>
                </div>
              </div>

              <div class="form-group">
                <%= f.label :phone, "Teléfono" ,class: "cols-sm-2 control-label" %><br />
                <div class="cols-sm-10">
                  <div class="input-group">
                    <span class="input-group-addon"><i class="fa fa-phone fa" aria-hidden="true"></i></span>
                    <%= f.text_field :phone, autofocus: true, class: "form-control" %>
                  </div>
                </div>
              </div>

              <div class="form-group">
                <%= f.label :identification, "Número de identification" ,class: "cols-sm-2 control-label" %><br />
                <div class="cols-sm-10">
                  <div class="input-group">
                    <span class="input-group-addon"><i class="fa fa-envelope fa" aria-hidden="true"></i></span>
                    <%= f.text_field :identification, autofocus: true, class: "form-control" %>
                  </div>
                </div>
              </div>


              <div class="form-group">
                <%= f.label :guardian, "Guardian legal" ,class: "cols-sm-2 control-label" %><br />
                <div class="cols-sm-10">
                  <div class="input-group">
                    <span class="input-group-addon"><i class="fa fa-user fa" aria-hidden="true"></i></span>
                    <%= f.text_field :guardian, autofocus: true, class: "form-control" %>
                  </div>
                </div>
              </div>

              <div class="form-group ">
                <label>
                  <%= f.radio_button :role, "student" , :checked => true %>
                  Estudiante
                </label>
                <label>
                  <%= f.radio_button :role, "teacher" %>
                  Profesor
                </label>
              </div>



              <div class="form-group">
                <%= f.label :password, "Contraseña" ,class: "cols-sm-2 control-label" %><br />
                <div class="cols-sm-10">
                  <div class="input-group">
                    <span class="input-group-addon"><i class="fa fa-lock fa" aria-hidden="true"></i></span>
                    <% if @minimum_password_length %>
                      <em>(<%= @minimum_password_length %> characters minimum)</em>
                    <% end %>
                    <%= f.password_field :password, autofocus: true, class: "form-control", autocomplete: "off" %>
                  </div>
                </div>
              </div>


              <div class="form-group">
                <%= f.label :password_confirmation, "Confirmar contraseña" ,class: "cols-sm-2 control-label" %><br />
                <div class="cols-sm-10">
                  <div class="input-group">
                    <span class="input-group-addon"><i class="fa fa-lock fa" aria-hidden="true"></i></span>
                    <%= f.password_field :password_confirmation, autofocus: true, class: "form-control", autocomplete: "off" %>
                  </div>
                </div>
              </div>

              <div class="form-group ">
                <%= f.submit "Editar", class: "btn btn-primary btn-lg btn-block login-button" %>
              </div>

            <% end %>
          </div>
        </div>
        <p class="invisible">asdsadsadsdsadsad</p>
      </div>
<% else %>
  <h1>Acceso exclusivo para administradores</h1>
<% end %>
那么,如果我的文件按照控制器上的预期重定向,为什么我的文件没有被更新呢


感谢阅读。

由于您正在使用Desive,我认为您需要如下设置:

before_action :configure_permitted_parameters
  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:account_update) << [:username, :names]
  end
在\u操作之前:配置\u允许的\u参数
受保护的
def配置\u允许的\u参数

设计\参数\消毒器。对于(:帐户\更新)更新,无论对象是否已成功更新,都不会引发错误。通常人们会做一些类似于
if user.update(params)else render edit#show errors的事情
你也可以做
user.update!(params)
如果记录没有成功更新,它会立即抛出错误,这样您就可以确切地知道它没有更新的原因。@trueinViso即使使用if语句,它也会重定向到用户,因此它似乎正在进行更新。您是否尝试过
?或者打印出
user\u update\u params
以确保它们被发送到更新方法?@trueinViso ok,因此我看到了问题,它正确地发出了补丁请求,但随后显示了未经允许的参数:用户名、姓名、姓氏、电话、身份、监护人、角色、密码、密码确认,即使我在这里允许它们,用户\u更新\u参数
before_action :configure_permitted_parameters
  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:account_update) << [:username, :names]
  end
class UsersController < Devise::RegistrationsController