0

http://ruby.railstutorial.org/をフォローしています

class User < ActiveRecord
  attr_accessible ..., :password, :password_confirmation
  has_secure_password

  validates :password, :presence => true,
                       :length => { :minimum => 6 }
  validates :password_confirmation, :presence => true

  ....
end

問題は、新しいユーザーを作成することです。これは正常に機能します。両方のパスワードが存在し、一致している必要があります。更新するときに、パスワードを入力する必要があります。

たとえば、別のコントローラーがユーザーのフィールドを変更したい場合は、パスワードを入力する必要があります。そうしないと、更新できません。

モデルの作成時またはパスワードの更新時にpassword/password_confirmationのみを要求する条件を作成するにはどうすればよいですか?

4

2 に答える 2

1

rails3を使用している場合は、検証をスキップできます。ドキュメントから:

次のメソッドは検証をスキップし、その有効性に関係なくオブジェクトをデータベースに保存します。注意して使用する必要があります。

  • デクリメント!
  • decrement_counter
  • インクリメント!
  • インクリメントカウンター
  • トグル!
  • 触る
  • update_all
  • update_attribute
  • update_column
  • update_counters

saveには、:validate => false引数として渡された場合に検証をスキップする機能もあることに注意してください。この手法は注意して使用する必要があります。

基本的にfind、適切なユーザーを見つけるために使用し、必要なフィールドを更新しますuser.save!(:validate=>false)。そして、ボブはあなたの叔父です!

于 2012-11-21T18:15:54.020 に答える
1

Railsは、ユーザーモデルなどの条件付き検証をサポートしています

validates :password_confirmation, :presence => true, :if => :new_password

def new_password
  current_user and current_user.changing_password?
end

new_password検証するときに、どのような条件が真であるかを判断する方法をメソッドで理解する必要があります。

参照: http: //railscasts.com/episodes/41-conditional-validations

于 2012-11-21T18:33:42.890 に答える