相关疑难解决方法(0)

Rails 验证关联和错误消息

我想显示来自 Child 模型的验证消息,它给了我基本的 Child 无效。我尝试了所有的解决方案,但没有成功。简而言之,模型如下:

Class Parent
  ...
  has_many :children, dependent: :destroy, inverse_of: :parent
  accepts_nested_attributes_for :children, allow_destroy: true
end

Class Child
  belongs_to :parent
  validate :something
  def something
    check = # Here I check something
    if check < 5
      errors[:base] << "validation on children failed"
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

如果我添加validates_associated :children到 Parent 模型,那么我实际上会收到两条Children is invalid消息,这有点奇怪。

无论如何,我可以将此块添加到 Parent 模型并获取我想要添加到 Parent :base 错误列表中的任何验证消息:

validate do |parent|
  parent.children.each do |child|
    check = # Here I check something
    if check < 5 …
Run Code Online (Sandbox Code Playgroud)

validation ruby-on-rails

4
推荐指数
2
解决办法
2194
查看次数

Rails validates_association与模型的错误消息

我使用模型中的validates_associated来使用其他模型的验证代码.这个问题是验证失败的消息是"..无效".

我想将模型验证失败的实际描述性错误冒出来!

我发现了这个问题: 与模型的错误消息相关的验证

哪个看起来像一个非常接近的解决方案:

module ActiveRecord
  module Validations
    class AssociatedBubblingValidator < ActiveModel::EachValidator
      def validate_each(record, attribute, value)
        (value.is_a?(Array) ? value : [value]).each do |v|
          unless v.valid?
            v.errors.full_messages.each do |msg|
              record.errors.add(attribute, msg, options.merge(:value => value))
            end
          end
        end
      end
    end

    module ClassMethods
      def validates_associated_bubbling(*attr_names)
        validates_with AssociatedBubblingValidator, _merge_attributes(attr_names)
      end
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

但实际上它遇到了一个错误:

undefined method `valid?' for #<TicketType::ActiveRecord_Associations_CollectionProxy:0x007ff86474a478>
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助完成这个几乎工作的工作!?

完整的错误跟踪是:

undefined method `valid?' for #<TicketType::ActiveRecord_Associations_CollectionProxy:0x007ff8646ba148>

Extracted source (around line #6):
4
5
6
7
8
9

      def validate_each(record, attribute, value)
        (value.is_a?(Array) ? …
Run Code Online (Sandbox Code Playgroud)

ruby validation ruby-on-rails associations ruby-on-rails-4

3
推荐指数
1
解决办法
953
查看次数