私のユーザーモデルは( 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 %>
問題は、ユーザーが他のフィールドを更新するたびにpassword
andフィールドに入力する必要があることです。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つのオプションを考えています:
- 各ビューにすべてのユーザー フィールドがありますが、それらのフィールドを作成して、ユーザーに非表示のフィールドを見せたくない (問題は、何らかの理由でパスワードを取得できないことです。 return のようなもの
@user.password
ですnil
。できることはそれだけです@user.password_digest
。フィールドを検証しません)。 - と検証を追加
:unless
します(ただし、ビューにのみ適用されるようにする方法はわかりません)。password
password_confirmation
users/edit
ここで最善の解決策は何ですか?