1

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
4

1 に答える 1

0

ここにこの質問に対する本当に良い答えがあると思います.Rails 3では、パスワードを更新しようとしていないときにパスワードフィールドの検証をスキップするにはどうすればよいですか?

繰り返しますが、与えられた答えはかなり良いです。また、件名のRailscastを指します。

于 2012-08-01T15:29:50.730 に答える