Ruby on rails 验证嵌套属性
我的应用程序上有OpenID认证,默认情况下不需要电子邮件,但若用户创建请求,我需要验证电子邮件的存在Ruby on rails 验证嵌套属性,ruby-on-rails,validation,nested-forms,nested-attributes,Ruby On Rails,Validation,Nested Forms,Nested Attributes,我的应用程序上有OpenID认证,默认情况下不需要电子邮件,但若用户创建请求,我需要验证电子邮件的存在 class Request < ActiveRecord::Base belongs_to :user accepts_nested_attributes_for :user end class User < ActiveRecord::Base has_one :request, dependent: :destroy validates :email, for
class Request < ActiveRecord::Base
belongs_to :user
accepts_nested_attributes_for :user
end
class User < ActiveRecord::Base
has_one :request, dependent: :destroy
validates :email, format: { with: Devise.email_regexp, allow_blank: true }
end
我已经尝试了两个变体,但它们不起作用,并且没有显示验证消息
第一:
class User < ActiveRecord::Base
validates :email, presence: true, if: ->(u) { u.request.present? }
end
第二点:
class Request < ActiveRecord::Base
validate :validate_user_email
def validate_user_email
self.user.errors.add(:email, :blank) if self.user.email.blank?
end
end
有人能提出一些可行的建议吗?谢谢 奇怪,你的第一个方法是正确的。一定还有别的事。你如何检查它是否有效?你说属性是嵌套的。你的表单是什么样子的?@agis,我使用pry进行调试。第一个版本从数据库中加载获取请求,但该请求在数据库中还不存在。@jason carty,表单代码:`=simple\u form_for@request,html:{class:'custom'}do | f |。表单输入=f.input:user_id,as::hidden=f.simple_字段_for:user do | ff |=ff.input:email`