0

我的用户模型正在使用has_secure_password(基于Rails 教程书):

架构.rb:

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

用户.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 %>

现在的问题是用户每次想要更新其他字段时都必须填写passwordand字段。password_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 %>

用户/编辑密码:

(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. 添加:unless和验证(但我不知道如何做到这一点,以便它只适用于password视图)。password_confirmationusers/edit

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

4

2 回答 2

1

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

看看设计实现(验证控制器),它可以提供帮助。

于 2013-01-14T09:19:10.823 回答
0

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

于 2013-01-14T10:29:25.487 回答