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

时间:2013-01-22 02:40:30

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2

关于嵌套模型表单的this 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,空白问题字段以及非空白答案字段将被丢弃。

如果答案存在但不是问题,我可以做些什么来使验证捕获,允许用户删除答案或提出问题?

1 个答案:

答案 0 :(得分:1)

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

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

另请查看github中的revised source code,这是有用的