如何更新用户配置文件而无需填写密码和password_confirmation字段?

时间:2013-01-14 09:03:47

标签: ruby-on-rails

我的用户模型正在使用has_secure_password(基于Rails tutorial Book):

schema.rb:

create_table "users", :force => true do |t|
  t.string   "password_digest"
end

user.rb:

class User < ActiveRecord::Base
  attr_accessible :name, :email, :avatar, :password, :password_confirmation, :provider, :uid

  has_secure_password

  validates :password, presence: true, length: { minimum: 6 }
  validates :password_confirmation, presence: true

我有这个编辑视图:

<%= f.label :name %>
<%= f.text_field :name %>

<%= f.label :email %>
<%= f.text_field :email %>

<%= f.label :password %>
<%= f.password_field :password %>

<%= f.label :password_confirmation, "Confirm Password" %>
<%= f.password_field :password_confirmation %>

<%= f.label :avatar %>
<%= f.file_field :avatar %>

现在问题是用户每次想要更新其他字段时都必须填写passwordpassword_confirmation字段。

所以我想分开表格:

用户/ edit.html.erb:

<%= f.label :name %>
<%= f.text_field :name %>

<%= f.label :email %>
<%= f.text_field :email %>

<%= f.label :avatar %>
<%= f.file_field :avatar %>

用户/ edit_password:

(I will add a current_password field later here).

<%= f.label :password, "New Password" %>
<%= f.password_field :password,  %>

<%= f.label :password_confirmation, "Confirm Password", "Retype Password" %>
<%= f.password_field :password_confirmation %>

我正在考虑两个选择:

  1. 在每个视图中包含所有用户字段,但是创建这些字段我不希望用户看到隐藏字段(问题是由于某种原因我无法检索密码。像@user.password之类的东西返回nil。我只能执行@user.password_digest但不会验证字段。
  2. :unlesspassword验证中添加password_confirmation(但我不知道该怎么做才能使它仅适用于users/edit视图)。< / LI>

    这里最好的解决方案是什么?

2 个答案:

答案 0 :(得分:1)

您无法获取用户密码,因为数据库不存储它(它存储单向加密密码摘要)。所以第二种选择是正确的。

看看设计实施(validationcontroller),它可以提供帮助。

答案 1 :(得分:0)

您可以使用object.save跳过验证:validate =&gt; false