accepts_nested_attributes_for适用于编辑/更新,而不适用于new / create

时间:2012-04-12 11:29:39

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

我在“timesheet”和“timesheetlines”之间有一个“accepts_nested_attributes_for”关系。这在编辑(编辑/更新)时间表时效果很好,但在添加新时间表(new / create)时,它会返回以下错误:

tms timesheetlines tms timesheet can't be empty

似乎它不知道新时间表属于哪个时间表。这是时间表中的关系:

has_many :tms_timesheetlines, :dependent => :destroy, :order=>"daynr ASC"
accepts_nested_attributes_for :tms_timesheetlines, :reject_if => lambda { |a| a[:daynr].blank? }, :allow_destroy => true

在“新”行动中,时间表是构建的:

@timesheet = TmsTimesheet.new
month_lines = Time.days_in_month(@current_period.period_nr).to_i
month_lines.times { @timesheet.tms_timesheetlines.build }

任何想法为什么它在编辑时没有任何问题,但在创建时没有?谢谢!

更新

当我将新的时间表添加到每个时间表时,保存新的和编辑的时间表都有效:

<%= tl.hidden_field :tms_timesheet_id, :value => timesheet %>

这是一个编辑:

<%= tl.hidden_field :tms_timesheet_id, :value => timesheet.id %>

为什么两者兼而有之?

1 个答案:

答案 0 :(得分:0)

检查:tms_timesheetlines上的验证。我的猜测是,它正在验证timesheet的存在并且没有对此进行验证。

如果是这种情况,那么它在创建时失败但传递更新的原因是因为使用嵌套表单时,在验证子项(时间表行)期间父项的id将不会被知道(存在),但是当你在来更新记录。