Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails:Authlogic:无法更新用户属性--";密码字段不能为空";_Ruby On Rails_Authlogic - Fatal编程技术网

Ruby on rails Rails:Authlogic:无法更新用户属性--";密码字段不能为空";

Ruby on rails Rails:Authlogic:无法更新用户属性--";密码字段不能为空";,ruby-on-rails,authlogic,Ruby On Rails,Authlogic,我在用户页面上有一个简单的表单,允许用户在登录后更改自己的用户对象上的一些属性。观点: <% form_for @user, :url => {:controller => "teachers", :action => "update"} do |f| %> <%= f.error_messages %> <%= f.text_field :display_name %> <%= f.submit "Update

我在用户页面上有一个简单的表单,允许用户在登录后更改自己的用户对象上的一些属性。观点:

<% form_for @user, :url => {:controller => "teachers", :action => "update"} do |f| %>
    <%= f.error_messages %>
    <%= f.text_field :display_name %>
    <%= f.submit "Update" %>
<% end %>
看风景

接下来,控制器中的
update
操作尝试处理保存:

@user = current_user
if @user.update_attributes(params[:user])
  flash[:notice] = "Successfully updated profile."
  redirect_to root_url
else
  render :action => 'edit'
end
这将更新
user
对象上的
display\u name
属性,将其保存到数据库,并重定向到根url。相反,
edit
操作再次呈现,表单的错误消息指示“密码不能为空”

这显然是Authlogic正在搞乱的东西!啊!下面是我的整个
Users.rb
文件:

class User < ActiveRecord::Base
  acts_as_authentic do |c|
    c.transition_from_crypto_providers = Authlogic::CryptoProviders::MD5
    c.crypto_provider = Authlogic::CryptoProviders::Sha512
    c.validate_email_field = false
    c.require_password_confirmation = false
    c.ignore_blank_passwords = true
    c.validate_password_field = false
  end

  belongs_to :school

  validates_presence_of :first_name, :last_name, :email, :password
  validates_uniqueness_of :email, :scope => :email, :case_sensitive => false, :message => "is already in our database. Please contact us for help reactivating your account."

  ROLES = %w[admin teacher student]

  def role_symbols
    [role.to_sym]
  end
end
class用户:email、:case\u-sensitive=>false、:message=>“的唯一性。请与我们联系以获取重新激活您的帐户的帮助。”
角色=%w[管理教师学生]
定义角色符号
[角色到符号]
结束
结束
正如您所看到的,我已经关闭了我能找到的大多数Authlogic验证,以保持这个简单和功能!还是不走运。如果我在编辑页面中添加一个
password\u字段
,那么它将成功工作——但当此表单仅用于更新用户的
显示名称时,它也将更新用户的密码

关于如何更新
用户
对象上的属性而不必输入用户密码的任何提示?

您尝试过吗

validate_password_field = false

原来问题不在于Authlogic。问题是我的
验证了每当我更新我的用户对象时触发的
的存在性。我在验证中添加了一个
:on=>:create
规定,现在一切正常。

尝试过了!不走运。仍然获得
密码不能为空
。请向我们展示您当前的型号。感谢您的耐心等待,Trevoke。我刚刚设法弄明白了!将整个模型添加到我的问题中,让我有机会回去尝试其他潜在的陷阱。。。事实证明,Authlogic根本不是问题所在。问题是我的
验证了每当我更新我的用户对象时触发的
的存在性。我在验证中添加了一个
:on=>:create
规定,现在一切正常。我仍然不明白为什么验证没有抱怨
:first\u name
:last\u name
,或者
:email
没有被包括在内,但是嘿,它现在可以工作了!再次感谢。此解决方案的问题在于,如果您的用户有多个属性,并且您尝试更新其他属性之一,同时将密码字段保留为空,则实际上您将密码更改为“”。理想情况下,如果字段留空,您可以不更新密码。
validate_password_field = false