0

私のユーザーモデルは( Railsチュートリアルブックhas_secure_passwordに基づいて)使用しています:

スキーマ.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 %>

私は2つのオプションを考えています:

  1. 各ビューにすべてのユーザー フィールドがありますが、それらのフィールドを作成して、ユーザーに非表示のフィールドを見せたくない (問題は、何らかの理由でパスワードを取得できないことです。 return のようなもの@user.passwordですnil。できることはそれだけです@user.password_digest。フィールドを検証しません)。
  2. と検証を追加:unlessします(ただし、ビューにのみ適用されるようにする方法はわかりません)。passwordpassword_confirmationusers/edit

ここで最善の解決策は何ですか?

4

2 に答える 2

1

DB には保存されないため (一方向暗号化されたパスワード ダイジェストが保存されます)、ユーザーのパスワードを取得することはできません。したがって、2 番目のオプションが正しいです。

Devise の実装 ( validationcontroller ) を見てみましょう。

于 2013-01-14T09:19:10.823 に答える
0

object.save :validate=>false を使用して検証をスキップできます

于 2013-01-14T10:29:25.487 に答える