代码之家  ›  专栏  ›  技术社区  ›  Damien MATHIEU

验证嵌套属性数

  •  4
  • Damien MATHIEU  · 技术社区  · 16 年前

    我有一个带有嵌套属性的模型:

    class Foo < ActiveRecord::Base
        has_many :bar
        accepts_nested_attributes_for  :bar
    end
    

    我无法访问 bar_attributes 所以我似乎无法验证。

    有没有干净的方法?

    3 回复  |  直到 16 年前
        1
  •  7
  •   Paige Ruten    15 年前
    class Foo < ActiveRecord::Base
      has_many :bars
      accepts_nested_attributes_for  :bar
    
      def validate
        if self.bars.reject(&:marked_for_destruction?).length < 2
          self.errors.add_to_base("Must have at least 2 bars")
        end
      end
    end
    

    控制器将负责建立/更新酒吧,所以你只需要看看你是否有足够的。

        2
  •  2
  •   Ryan Horrisberger    16 年前

    托尼的回答实际上不能解决 现有的

    由于父级(Foo)的验证发生在嵌套的子级(条)被销毁之前,Foo将通过验证,然后这些条将被销毁,并且不会向用户显示任何错误。

    我想加上这个作为一个评论,但截至目前没有足够的代表

        3
  •  1
  •   user1116573    14 年前

    以防任何人看到这一点需要它来为Rails 3工作。我认为add\u to\u base(Tony和Jeremy使用的)已经被删除,所以它需要如下:

    class Foo < ActiveRecord::Base
      has_many :bars
      accepts_nested_attributes_for  :bar
    
      def validate
        if self.bars.reject(&:marked_for_destruction?).length < 2
          self.errors.add(:base, "Must have at least 2 bars")
        end
      end
    end
    
    推荐文章