2011-06-30 6 views
1

私は次のような状況に慣れようとしています。私はとのトラブルを抱えている何Formtastic Nesting Help

routine.rb

class Routine < ActiveRecord::Base 
    has_many :exercise_routines 
    has_many :exercises, :through => :exercise_routines 
    accepts_nested_attributes_for :exercise_routines 
end 

exercise_routine.rb

class ExerciseRoutine < ActiveRecord::Base 
    belongs_to :exercise 
    belongs_to :routine 
    has_many :attempts 
    accepts_nested_attributes_for :attempts 
end 

show.html#/ルーチン/ show.html.haml

%h2 Exercises: 

%ol 
    - for exercise_routine in @routine.exercise_routines 
    %li= exercise_routine.exercise.name 
    %ul 
     %li 
     = exercise_routine.sets 
     Sets 
     %li 
     = exercise_routine.reps 
     Reps 
     %li 
     Attempt: 
     - for attempt in exercise_routine.attempts 
      = attempt.reps 
     = semantic_form_for @routine do |routine| 
      = routine.semantic_fields_for exercise_routine do |exercise_routine| 
      = exercise_routine.semantic_fields_for :attempts do |attempt| 
       = attempt.input :reps, :required => false 
      = routine.buttons` 

2つのことがあります: 1)これは、私が手動でthroぐふコンソールが、私はそれを更新しようとする場合、私は買ってあげる:「:exercise_routine不明な属性を」と私はのparamsのでことを実現:

{"utf8"=>"✓", 
"_method"=>"put", 
"authenticity_token"=>"51fZRe1wKRQoVUz+lGlldd4DmMODGHN203Htc4DEi0Y=", 
"routine"=>{"exercise_routine"=>{"attempts_attributes"=>{"0"=>{"reps"=>"5", 
"id"=>"1"}, 
"1"=>{"reps"=>"1555", 
"id"=>"2"}, 
"2"=>{"reps"=>""}}}}, 
"commit"=>"Update Routine", 
"id"=>"3"}` 

は右見てはいけません。これは、idを持つexercise_routinesを参照する必要があります。

2)同時に試行を追加したいですか?

@routine.exercise_routines.each do |er| 
    1.times {er.attempts.build} 
end 

正しくレンダリングしますが、もちろん同じパラメータの問題が発生しています。私は何か愚かに間違っているか、これは複数のコレクションの入れ子のこのタイプを行うと思うよりも難しいですか?

答えて

0

fields_forは正しく使用されていません。最初の引数は、ネストされたフィールドに使用する関連付けにあります。次に、2番目のモデルは、関連の値として使用する/単一のモデルのコレクションにすることができます。

= routine.semantic_fields_for :exercise_routines, exercise_routine do |f| 

また、私はブロック内のローカルフォームビルダでexercise_routineまずローカルを隠していないお勧めします。そして私はforループの代わりに@routine.exercise_routines.each do |exercise_routine|フォームを使用します。