2012-03-19 8 views
0

ネストされた属性を持つレコードを作成する2つの同様の方法を使用しています。createを使用中です! accepts_nested_attributesが有効な場合

まず道

m = Macrocycle.create!({"name"=>"sdfasdf", "description"=>"rt3t", 
         "mesocycles_attributes"=>[{"name"=>"34fervaav", "_destroy"=>"false", "description"=>"asdfadf", "phase_number"=>"1", "workout_days_attributes"=>{"new_1332120641337"=>{"day"=>"1", "_destroy"=>"false"}}}]}) 
=> #<Macrocycle id: 37, name: "sdfasdf", description: "rt3t", created_at: "2012-03-19 01:57:05", updated_at: "2012-03-19 01:57:05"> 
1.9.3p125 :047 > m.mesocycles[0]                                    
=> #<Mesocycle id: 30, name: "34fervaav", created_at: "2012-03-19 01:57:05", updated_at: "2012-03-19 01:57:05", description: "asdfadf", macrocycle_id: 37, phase_number: 1> 
1.9.3p125 :048 > m.mesocycles[0].workout_days 
=> [#<WorkoutDay id: 2, day: 1, created_at: "2012-03-19 01:57:05", updated_at: "2012-03-19 01:57:05", mesocycle_id: 30>] 

あなたが見ることができるように、両方のmesocyclesとworkout_daysが正しく作成されています。私は(代わりにそれぞれの子のためのユニークなキーを持つハッシュを使用して、child_attributesアレイを使用する)この方法を使用している場合でも:

m = Macrocycle.create!({"name"=>"sdfasdf", "description"=>"rt3t", "mesocycles_attributes"=>{"new_1332120631785"=>{"name"=>"34fervaav", "_destroy"=>"false", "description"=>"asdfadf", "phase_number"=>"1"}, "workout_days_attributes"=>{"new_1332120641337"=>{"day"=>"1", "_destroy"=>"false"}}}}) 
=> #<Macrocycle id: 38, name: "sdfasdf", description: "rt3t", created_at: "2012-03-19 02:15:39", updated_at: "2012-03-19 02:15:39"> 
1.9.3p125 :052 > m.mesocycles[0] 
=> #<Mesocycle id: 31, name: "34fervaav", created_at: "2012-03-19 02:15:39", updated_at: "2012-03-19 02:15:39", description: "asdfadf", macrocycle_id: 38, phase_number: 1> 
1.9.3p125 :051 > m.mesocycles[0].workout_days        
=> [] 

workout_daysが適切に作成されていません。しかし、中間循環は正しく作成されています。

なぜ私はこれが起こっているのか分からないのですか?それは私が行方不明になっている何か愚かなものですか?私が尋ねる理由は、私はryanbのnested_form gemを使ってデータベースにレコードを作成し、nested_formは第2の方法を使用しているということです。実際、私は上記のコンソールの例で直接paramsハッシュを使用しました。

それぞれの子に固有のキーを持つハッシュを使用するのは、ネスト内で1レベル下まで動作するようです。

更新:

協会コード:

マクロサイクルモデル:

class Macrocycle < ActiveRecord::Base 
    #attr_accessible :name, :description, :mesocycles_attributes 
    has_many :mesocycles, :dependent => :destroy 
    accepts_nested_attributes_for :mesocycles, :reject_if => lambda { |a| a[:name].blank? }, :allow_destroy => true 
end 

Mesocycleモデル:

class Mesocycle < ActiveRecord::Base 
    #attr_accessible :name, :phase_number, :description, :workout_days_attributes 
    belongs_to :macrocycle 
    #default_scope :order => 'mesocycles.phase_number ASC' 
    has_many :workout_days, :dependent => :destroy 
    accepts_nested_attributes_for :workout_days, :allow_destroy => true 
end 

ワークアウト日モデル:

class WorkoutDay < ActiveRecord::Base 
    attr_accessible :day, :blocks_attributes 
    belongs_to :mesocycle 
    has_many :blocks, :dependent => :destroy 
    accepts_nested_attributes_for :blocks#, :reject_if => lambda { |a| a[:name].blank? }, :allow_destroy => true 
end 
+0

ポストあなたの 'Association'コードお使いのモデルから提供すべきだと思います – Azolo

答えて

0

あなたのworkoutdayが含まれる前にハッシュが閉じています。

m = Macrocycle.create!({"name"=>"sdfasdf", "description"=>"rt3t", "mesocycles_attributes"=>{"new_1332120631785"=>{"name"=>"34fervaav", "_destroy"=>"false", "description"=>"asdfadf", "phase_number"=>"1", "workout_days_attributes"=>{"new_1332120641337"=>{"day"=>"1", "_destroy"=>"false"}}}}) 

これはとても残念ちょっと不可解であるが、私は、これはいくつかの助けを

関連する問題