【发布时间】:2015-04-09 07:03:17
【问题描述】:
我正在使用 rails 3.2 和 cocoon gem 来创建新的嵌套字段,并拥有这个模型。
ParteDiario.rb
class ParteDiario < ActiveRecord::Base
has_many :parte_diario_items, dependent: :destroy
has_many :task_one, through: :parte_diario_items
accepts_nested_attributes_for :parte_diario_items, :reject_if => lambda { |a| a[:employee_id].blank? and a[:new_employee].blank? }, :allow_destroy => true
validates_associated :parte_diario_items
end
ParteDiarioItem.rb
class ParteDiarioItem < ActiveRecord::Base
belongs_to :employee
belongs_to :task_one, :class_name => 'ParteDiarioTask', :foreign_key => 'task_one_id'
validates :employee_id, presence: true, if: "new_employee.nil?"
validates :new_employee, presence: true, if: "employee_id.nil?"
end
ParteDiarioItem 有两列:employee_id 和 new_employee(这是用于手动插入姓名的字符串)。这个想法是您可以使用现有员工创建一个项目,或者您可以创建一个 new_employee(只需手动编写一个名称)。如果您创建一个新员工,则 empleado_id 为 nil。这样,在数据库中,我将让每个项目都带有一个employee_id 或一个 new_employee_[name]。当其中一个为 nil 时,另一个不应为 nil。
提交表单时,仅发送其中一个字段(当向用户显示employee_id 输入时,不会发送new_employee 输入)。我使用 cocoon gem 创建新的嵌套字段,一切正常(验证除外)。
使用此语法不起作用。提交带有“new_employee input”空白项目的表单时,ParteDiario.valid?是真的。并且应该是假的。
也尝试过类似的方法,结果相同:
validates :employee_id, presence: true, unless: :new_employee
validates :new_employee, presence: true, unless: :employee_id
谁能帮帮我?
非常感谢!
【问题讨论】:
标签: ruby forms ruby-on-rails-3 validation nested-attributes