我在用户页面上有一个简单的表单,允许用户在登录后更改自己用户对象的某些属性。观点:
<% 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
对象上的属性而不必传递用户密码的任何提示?
答案 0 :(得分:4)
事实证明问题不在于Authlogic。问题是我validates_presence_of
每当我更新用户对象时都会触发。我在验证中添加了:on => :create
规定,现在一切正常。
答案 1 :(得分:0)
你试过这个吗?
validate_password_field = false