导轨 3 ':reject_if => lambda'阻止验证?



遵循嵌套模型表单的 RailsCast:

class Survey < ActiveRecord::Base
  has_many :questions, :dependent => :destroy
  accepts_nested_attributes_for :questions, :reject_if => lambda { |a| a[:content].blank? }, :allow_destroy => true
end

class Question < ActiveRecord::Base
  belongs_to :survey
  has_many :answers, :dependent => :destroy
  accepts_nested_attributes_for :answers, :reject_if => lambda { |a| a[:content].blank? }, :allow_destroy => true
  validates_presence_of :content
end

class Answer < ActiveRecord::Base
  belongs_to :question
  validates_presence_of :content
end

这些用于创建包含所有 3 个模型的嵌套表单。

问题是:我可以创建一个新调查,为调查指定标题,将问题内容留空,添加答案并单击提交。

调查随即创建。由于 lambda,空白问题字段和非空白答案字段将被丢弃。

当答案存在但不存在问题时,我该怎么做才能使验证捕获,从而允许用户删除答案或提供问题?

一种方法是在指定嵌套属性时删除:reject_if

或者,如果您需要更大的灵活性,您可以更新 lambda 以执行更多操作,例如:如果问题和答案都为空,则拒绝。

另请查看 github 中修改后的源代码,这很有帮助

相关内容

  • 没有找到相关文章

最新更新