2017-10-23 4 views
0

私のRails5.1.4プロジェクトにはStationモデルがあり、いくつかの保存されたレコードがあります。ActiveRecordで変更を加えずに保存されたレコードを検証する方法は?

class Station < ApplicationRecord 
end 

> Station.first 
# => #<Station:0x0055f5ca447d78 id: 1, name: nil> 

次に、新しい検証(名前の存在チェック)を追加しました。

class Station < ApplicationRecord 
    with_options on: [:publishing] do 
    # added new validation 
    validates :name, presence: true 
    end 
end 

ここで、検証すると!属性を変更せずに呼び出されるメソッド。検証!メソッドがtrueを返しました。

> reload! 
> station = Station.first 
# => #<Station:0x0055f5cf4b6228 id: 1, name: nil> 
> station.validate!(context: :publishing) # without attributes changing 
# => true 
# expected ActiveRecord::RecordInvalid raising. 

ここに私の1つの問題があります。

私はActiveRecordがActiveRecord::RecordInvalidになると予想しました。これは、nameの存在確認が追加されたためです。

どうすればいいですか?

参考にしてください。

+0

あなたは既存のレコードの状況を処理していますか?あなたのコメントのために – Nithin

+0

ありがとう!いいえ、私はそうではありません。ちょうど記録を取って、validateを呼び出してください!メソッド –

+1

これは再現できません。 Rails 5.1.4、期待どおりに動作しています。 – kolas

答えて

4

間違った議論です。このようにそれを呼び出すようにしてください:

station.validate!(:publishing) 

ドキュメント:https://apidock.com/rails/v4.2.7/ActiveRecord/Validations/validate%21

+0

ええ!ありがとう!私は 'save!'のような 'validate!'メソッドを使うことができると思っていました。ご協力いただきありがとうございます! –

2

有効を使用してみてください?

station = Station.first 
station.valid? 

それは罰金:)

注動作するはずです: 他の回答の両方が検証として正常に動作する必要があります検証を使用することをお勧めしますが、有効なの別名ですか?。確認this

+0

詳細はこちらhttp://api.rubyonrails.org/classes/ActiveModel/Validations.html#method-i-valid-3F – sghosh968

+0

'valid?(:publishing)'は私の検証結果を示しています!それはすばらしい!ありがとう! –

関連する問題