我在“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 %>
为什么两者兼而有之?
答案 0 :(得分:0)
检查:tms_timesheetlines
上的验证。我的猜测是,它正在验证timesheet
的存在并且没有对此进行验证。
如果是这种情况,那么它在创建时失败但传递更新的原因是因为使用嵌套表单时,在验证子项(时间表行)期间父项的id将不会被知道(存在),但是当你在来更新记录。