ネストされた属性を持つレコードを作成する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
ポストあなたの 'Association'コードお使いのモデルから提供すべきだと思います – Azolo