「timesheet」と「timesheetlines」の間に「accepts_nested_attributes_for」の関係があります。これは、タイムシートを編集(編集/更新)する場合はうまく機能しますが、新しいタイムシートを追加する(新規/作成)場合は、次のエラーが返されます。
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 %>
なぜ両方を機能させるための違いはありますか?