Rails 3.2を使用していて、ユーザーがデータを更新できるようにするフォームを作成しようとしています。ただし、ユーザーがパスワードを変更したくない場合は、フィールドを空白にすることで変更できます。
これがフォームの私のコードです:
<%= form_for(@user) do |f| %>
<%= f.label :name %>
<%= f.text_field :name %>
<%= f.label :email %>
<%= f.text_field :email %>
<%= f.label :new_password %>
<%= f.password_field :password %>
<%= f.label :password_confirmation, "Confirm password" %>
<%= f.password_field :password_confirmation %>
<%= f.submit "Save changes" %>
<% end %>
そして、これがユーザーコントローラーでのメソッドの更新です。
def update
if @user.update_attributes(params[:user])
sign_in @user
flash[:success] = "Profile updated"
redirect_to @user
else
render 'edit'
end
end
パスワードのフィールドを空白のままにすると、間違ったパスワードのフラッシュメッセージが常に表示されます。
ありがとうございました
- -アップデート - -
これが私のユーザーモデルです:
class User < ActiveRecord::Base
attr_accessible :name, :email, :password, :password_confirmation, :team_id, :updating_password
before_save { |user| user.email = email.downcase }
before_save :create_remember_token
validates :name, presence: true, length: { maximum: 50 }
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :email, presence: true,
format: { with: VALID_EMAIL_REGEX },
uniqueness: { case_sensitive: false}
validates :password, presence: should_validate_password? , length: { minimum: 6 }
validates :password_confirmation, presence: should_validate_password?
def should_validate_password?
updating_password || new_record?
end
def create_remember_token
self.remember_token = SecureRandom.urlsafe_base64
end