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