2016-10-17 2 views
1

オプションのフォームフィールド:meetup_apikeyとカスタム検証メソッドapi_key_valid?を使用して、返されたAPIリクエストが成功したかどうかを確認します。しかし、meetup_apikeyフォームフィールドが空でない(ユーザーがフォーム送信時に何かを入力した)場合にのみ、検証をチェックしたいと思います。 meetup_apikeyフォームフィールドが空の場合は、検証を無視してフォームを保存できるようにしたいと考えています。オプションのフォームフィールドを検証する方法は?

見てください:http://guides.rubyonrails.org/v2.3.11/activerecord_validations_callbacks.htmlドキュメントとValidation to ensure uniqueness of but ignoring empty values?

validates :meetup_apikey, allow_blank: true 
validates :api_key_valid?, :if => :meetup_apikey 

def api_key_valid? 
    url = "https://api.meetup.com/2/events?key=#{meetup_apikey}&sign=true&photo-host=public&group_urlname=#{meetup_urlname}" 
    if !HTTParty.get(url).success? 
    errors.add(:meetup_apikey, "Meetup API key must be valid") 
    end 
end 

しかし、これはまだ何も:meetup_apikeyフォームフィールドに入力されていない場合でも、チェックを強制的に:

は、これは私が私のモデルに持っているものです。私は何が欠けているのか間違っているのか分かりません。

提案があれば助かります。ありがとう!ここで

+1

あなたは、そのプレゼンス( '「」.presentをテストするために、属性名の後に疑問符を追加することができます' 'false'を返します)。 'validates:api_key_valid ?,:if =>:meetup_apikey?' – MrYoshiji

+0

ありがとうございます。よろしくお願いします。 – teresa

答えて

2

あなたはmeetup_apikey属性が非空白である場合にのみ、api_key_valid?検証を適用したい方法です:?

validates :api_key_valid?, unless: ->(x) { x.meetup_apikey.blank? } 
+0

ありがとう、これは私のために働いた。次の場合を除き、理解するのはちょっと難しかった: - >(x){x.meetup_apikey.blank? } '。しかし、私は、 ':meetup_apikey'が空白(塗りつぶされていない)でない限り、コードが':api_key_valid? ' – teresa

+0

@tshckrあなたが正しいです、それは基本的に 'を除く: - >(the_object_i_am_validating){the_object_i_am_validating.meetup_apikey.blank? } ':)これは、検証しているオブジェクトのコンテキストにフックする方法です –

関連する問題