35662

[code]

    class Hoge
      include ActiveModel::Model
      attr_accessor :tags
      validate :tags, prepend: true
    
      def run
        p @tags ## ""
        p valid? ## true
      end
    end
    
[/code]

このようなクラスがあります。  
私としては、tagsが空かどうかチェックしたいと思っています。  
そこで`validate :tags, prepend: true`のように記述しました。  
そしてvalid?メソッドを使用して、nilがどうかチェックしたいです。  
しかしながら、tagsが""であるにも関わらずTrueが返ってきてしまいます。  
またtagsにnilを代入してもTrueが返ってきました。

なぜこのような挙動になるのでしょうか？  
ご回答いただけると助かります。


CC BY-SA 3.0
2017-06-17T10:05:08.300
35661
2017-06-17T10:20:54.383
15186
question
ruby-on-rails rails-activerecord
ActiveModelでValidationのprependが効かない


モデルのある要素の空・nilチェックは以下のように記載することでチェックできます。

[code]

    class Person < ActiveRecord::Base
      validates :tags, presence: true
    end
    
[/code]

上記のように書き換えた上で `valid?` すると `false` が返ってくると思います。

<https://railsguides.jp/active_record_validations.html#presence>


CC BY-SA 3.0
2017-06-17T10:20:54.383
35662
2017-06-17T10:20:54.383
22531
35661
answer