2012-04-12 14 views
1

"タイムシート"と "タイムシートライン"の間に "accepts_nested_attributes_for"の関係があります。タイムシートを(編集/更新)を編集するとき、これは素晴らしい作品が、新しいタイムシートを(新規作成/)を追加するとき、それは次のエラーを返します。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 

そして「新」アクションでtimesheetlinesは、ビルドされている:

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

作成する際の編集ではなく、とき、それは問題なく動作しますなぜ任意のアイデア?ありがとう!

更新:

はどちらが新しいタイムシートのとき、私は、各timesheetlineで、この隠しフィールドを追加するときに、新しい編集したタイムシートの作品の保存:

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

そして、このことは編集のとき:

​​

なぜ両者が機能するのですか?

+0

私は問題のあるものを更新しましたが、私の意見ではまだ変わっています。 – John

答えて

0

有効性を:tms_timesheetlinesで確認してください。私の推測では、それはtimesheetの存在を確認しており、失敗しているということです。

この場合、作成に失敗したのに更新を渡す理由は、ネストされたフォームでは、子の検証中に親のIDがわからない(存在する)が、あなたはその記録を更新するようになる。

関連する問題