1

User モデルに検証を追加しようとしています:

class User < ActiveRecord::Base
    validates :first_name, :last_name, :email, :password, presence: true

検証が行われると、「削除」できなくなります...is_deleteフィールドをに設定して、ユーザーをソフト削除してい1ます。これは、実際には:password. 代わりに、入力されたパスワードをソルトおよびハッシュし、それぞれのフィールド (hashed_pa​​ssword & salt) に保存するコールバックがあります。

それらを検証しようとすると、作成が妨げられます。

class User < ActiveRecord::Base
    validates :first_name, :last_name, :email, :hashed_pasword, :sal, presence: true

フォームが送信されたときに存在しないため、これは理にかなっています。

これを解決するにはどうすればよいですか?

コントローラーで更新 ...

  def delete_user
    user = User.find( params[:id] )
    # if !user
    #     flash[:error] = "Problem deleting user"
    #     redirect_to controller:'admin', action:'index'
    # end
    if ( user.update( is_deleted: 1) )
        flash[:notice] = "User successfully deleted"
    else
        flash[:error] = "Problem deleting user"
    end
    redirect_to controller:'admin', action:'index'    
  end

更新 以下のシドニーが提案する構文を使用しようとしていますが、ここにエラーが表示されます。this を使用してvalidates :password, length: { in: 6..20}, on: [:update, :create]からユーザーを「削除」すると、次のようになります。

/Users/ME/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/activesupport-4.0.0/lib/active_support/callbacks.rb:393: syntax error, unexpected '[', expecting tSTRING_CONTENT or tSTRING_DBEG or tSTRING_DVAR or tSTRING_END ...ue && (validation_context == :[:update, :create]) ... ^ /Users/ESL/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/activesupport-4.0.0/lib/active_support/callbacks.rb:402: syntax error, unexpected keyword_end, expecting ')' /Users/ESL/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/activesupport-4.0.0/lib/active_support/callbacks.rb:429: syntax error, unexpected keyword_end, expecting ')' /Users/ESL/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/activesupport-4.0.0/lib/active_support/callbacks.rb:430: syntax error, unexpected end-of-input, expecting ')'
4

3 に答える 3

2

できるよ

:first_name、:last_name、:email、:password、presence: true、:on => [ :create, :update ] を検証します。

于 2013-09-11T15:30:19.823 に答える
0

Sydney の提案の問題点は、ソフト削除が削除ではないことです。まだまだ更新です。その結果、「削除」しようとすると、検証は引き続き失敗します。

検証を整理することをお勧めします。

class User < ActiveRecord::Base
  validates :first_name, :last_name, :email, :salted_password, :salt, presence: true
  validates :password, presence: true, on: :create

  before :validation, on: :save, :salt_password

  private
    def salt_password
      unless self.password.blank?
        self.salt = ...
        self.salted_password = ...
      end
    end
end
于 2013-10-31T19:30:32.000 に答える