presenceがtrueかfalseか知る方法


モデルのバリデーションで

[code]

    class Hoge < ActiveRecord::Base
      validates :foo, presence: true
    end
    
[/code]

となっていた場合、必須項目であることをフォームに表示させたいと思っています。  
メタプログラミング的にモデルに`presence`が`true`か`false`問い合わせる方法はありませんか？

## 追記

考慮漏れしていたのですが  
`validates :foo, presence: true, if: -> { false }`  
とifを使ったパターンが抜けてしまっていました。できればこれにも対応したいです。  
（ifオプションがtrueかfalseか知る方法がわかればいけそうな気が...）

いけました。

`.options[:if]`にProcが入っているので、  
`.options[:if].call`でifオプションの結果が取得できました。

だたしやはり、  
`if: :admin?`のパターンはシンボルが入っているので`.call`できないですね...




`validators_on`を利用して以下のように判定する方法はいかがでしょうか。

[code]

    # presence: trueが設定されている場合、trueが返る
    Hoge.validators_on(:foo).any? { |_| _.is_a?(ActiveRecord::Validations::PresenceValidator) }
    
[/code]

参考:
<http://apidock.com/rails/ActiveModel/Validations/ClassMethods/validators_on>

