Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 验证嵌套属性_Ruby On Rails_Validation_Nested Forms_Nested Attributes - Fatal编程技术网

Ruby on rails 验证嵌套属性

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

我的应用程序上有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, 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`