1

「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 %>

なぜ両方を機能させるための違いはありますか?

4

1 に答える 1

0

の検証を確認してください:tms_timesheetlines。私の推測では、それはその存在を検証し、それにtimesheet失敗していると思います。

この場合、作成に失敗するが更新を渡す理由は、ネストされたフォームでは、子の検証(タイムシートライン)中に親のIDが不明(存在)になるが、更新時に存在するためです。レコード。

于 2012-05-28T20:01:40.773 に答える