【问题标题】:Rails how to validate optional form field?Rails如何验证可选的表单字段?
【发布时间】:2017-02-26 21:11:11
【问题描述】:

我有一个可选的表单字段: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 表单字段中没有输入任何内容。我不确定我遗漏了什么或写错了什么。

任何建议都会有所帮助。谢谢!

【问题讨论】:

  • 您可以在属性名称后添加问号以测试其是否存在("".present? 返回false)。 validates :api_key_valid?, :if => :meetup_apikey?
  • 谢谢@MrYoshiji,这对我有用,它更短更容易理解。

标签: ruby-on-rails forms validation


【解决方案1】:

只有当meetup_apikey 属性不为空时,您才会应用api_key_valid? 验证:

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

【讨论】:

  • 谢谢,这对我有用。 unless: ->(x) { x.meetup_apikey.blank? } 有点难以理解。但我可以看出代码会进行:api_key_valid? 验证,除非:meetup_apikey 为空白(未填写)。
  • @tshckr 你是对的,它基本上意味着unless: ->(the_object_i_am_validating) { the_object_i_am_validating.meetup_apikey.blank? } :) 这是挂钩到你正在验证的对象的上下文的方法
猜你喜欢
  • 2012-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-22
  • 2012-06-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多