Rails:Authlogic:无法更新用户属性 - “密码字段不能为空”

时间:2010-03-05 03:20:51

标签: 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" %>
<% end %>

我需要提供URL,因为它不是标准的RESTful控制器。控制器提供

@user = current_user

到视图。

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

@user = current_user
if @user.update_attributes(params[:user])
  flash[:notice] = "Successfully updated profile."
  redirect_to root_url
else
  render :action => 'edit'
end

这应该更新display_name对象上的user属性,将其保存到数据库,然后重定向到root_url。而是使用表单的error_messages再次呈现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

正如您所看到的,我已经关闭了大多数我能找到的Authlogic验证,以保持这种简单和功能!仍然没有运气。如果我将password_field添加到编辑页面,那么它将成功运行 - 但当此表单仅用于更新其display_name时,它也会更新用户的密码!

有关如何更新user对象上的属性而不必传递用户密码的任何提示?

2 个答案:

答案 0 :(得分:4)

事实证明问题不在于Authlogic。问题是我validates_presence_of每当我更新用户对象时都会触发。我在验证中添加了:on => :create规定,现在一切正常。

答案 1 :(得分:0)

你试过这个吗?

validate_password_field = false