轨道设计无法更新用户模型字段



我无法按照 de 设计自己的页面上的建议程序更新用户信息。当我单击表单中的"更新"按钮时,它会重定向回用户/显示而不更新任何内容。控制台上的日志显示调用了RegistrationsController#update操作,而不是从我的自定义注册控制器调用update_resource操作。

原木:

在 2016-12-11 18:34:51 +0200 为 127.0.0.1 启动补丁"/users" 通过注册控制器处理#更新为 HTML 参数: {"utf8"=>"✓", "authenticity_token"=>"5vqLuQKyuJIoCx0mYfBUhIQmvS0Il5jy+ty1f2XDsehJM4i3M8mMPK5tdPpVQ6MFHIj05ZcRKO7rhlxroM75pQ==", "user"=>{"first_name"=>"Birhanu", "last_name"=>"Hailemariam2", "email"=>"birhanuh4@gmail.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "current_password"=>"[FILTERED]"}, "commit"=>"Update User"} 用户负载(0.7 毫秒) 选择"用户"。* 从"用户"到"用户"的位置。id" = $1 按"用户"订购。id" ASC LIMIT 1 [["id", 1]] 帐户加载(0.4 毫秒)选择"公共"。帐户".*来自"公共"。帐户"在哪里"公共"。帐户"。子域" = $1 限制 1 [["子域", "test3"]] 用户负载 (0.4ms) 选择"用户"。* 从"用户"到"用户"的位置。id" = $1 限制 1 [["id", 1]] (0.3 毫秒) 开始 (0.7毫秒) 从"用户"中选择计数(*) (0.3ms) 回滚 重定向至 http://test3.lvh.me:3000/users/1 在 120ms 内完成 302 个 (活动记录: 4.5ms)

在 2016-12-11 18:34:51 +0200 为 127.0.0.1 启动 GET "/users/1">

views/devise/registrations/edit.slim

= simple_form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put }) do |f|
= f.input :first_name, autofocus: true 
= f.input :last_name, autofocus: true 
= f.input :email, autofocus: true 
- if devise_mapping.confirmable? && resource.pending_reconfirmation? 
div 
|Currently waiting confirmation for: = resource.unconfirmed_email 
.form-actions.col-sm-offset-3.m-b-xs    
i 
|(leave blank if you don't want to change it)
= f.input :password, autocomplete: "off" 
= f.input :password_confirmation, autocomplete: "off" 
.form-actions.col-sm-offset-3.m-b-xs    
i 
|(we need your current password to confirm your changes)
= f.input :current_password, autocomplete: "off" 
.form-actions.form.col-sm-offset-3
=> link_to I18n.t('button.cancel'), :back, class: 'btn btn-primary btn-outline'
= f.button :submit, class: 'btn btn-primary'

控制器/registrations_controller.rb

class RegistrationsController < Devise::RegistrationsController
protected    
def update_resource(resource, user_params)
resource.update_with_password(user_params)
end
def after_update_path_for(resource)
current_account
end
end

控制器/application_controller.rb

class ApplicationController < ActionController::Base
.
.
before_filter :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:accept_invitation, keys: [:first_name, :last_name])
devise_parameter_sanitizer.permit(:account_update, keys: [:first_name, :last_name, :email, :password, :password_confirmation, 
:current_password])
end
.
.
end

路线:

devise_for :users, controllers: { registrations: 'registrations' }

我已经设法找到了导致问题的原因。这是因为我有一个私有方法false返回值以before_saveActiveRecord 回调。事实来源:在此处输入链接描述

以前的版本:

private
def set_admin
self.admin = User.count == 0 
end

如果值为假,则应将其更改为返回nil

private
def set_admin
self.admin = User.count == 0 
nil
end

现在一切正常,我可以更新用户信息!

最新更新