Ruby 使用创建!接受\u时,启用嵌套的\u属性
我使用两种类似的方法来创建具有嵌套属性的记录 第一条路Ruby 使用创建!接受\u时,启用嵌套的\u属性,ruby,ruby-on-rails-3,Ruby,Ruby On Rails 3,我使用两种类似的方法来创建具有嵌套属性的记录 第一条路 m = Macrocycle.create!({"name"=>"sdfasdf", "description"=>"rt3t", "mesocycles_attributes"=>[{"name"=>"34fervaav", "_destroy"=>"false", "description"=>"asdfadf", "phase_number"=>
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>]
m=Macrocycle.create!({“名称”=>“sdfasdf”,“说明”=>“rt3t”,
“mesocycles\u attributes”=>[{“name”=>“34fervaav”、“\u destroy”=>“false”、“description”=>“asdfadf”、“phase\u number”=>“1”、“锻炼天数\u attributes”=>{“new\u 1332120641337”=>{“day”=>“1”、“destroy”=>“false”}}})
=> #
1.9.3p125:047>m.中旋回[0]
=> #
1.9.3p125:048>m.mesocycles[0]。训练天数
=> [#]
如您所见,中周期和训练日的创建都是正确的。但如果我使用这种方式(而不是对child_属性使用数组,而是对每个子元素使用具有唯一键的哈希):
m=Macrocycle.create!({“名称”=>“sdfasdf”,“描述”=>“rt3t”,“中循环”属性“=>{“新的”1332120631785”=>{“名称”=>“34fervaav”,“破坏”=>“假”,“描述”=>“asdfadf”,“阶段数”=>“1”},“训练日”=>“新的”=>“日”=>“1”、“破坏”=>“假”}})
=> #
1.9.3p125:052>m.中旋回[0]
=> #
1.9.3p125:051>m.mesocycles[0]。训练天数
=> []
未正确创建训练日。然而,中观周期的创建是正确的
我一辈子都不明白为什么会这样?我错过了什么愚蠢的事吗?我问这个问题的原因是,我正在使用ryanb的嵌套表单gem在数据库中创建一条记录,嵌套表单使用第二种方法。事实上,我只是在上面的控制台示例中直接使用了params散列
对于每个子级,使用具有唯一密钥的散列似乎可以在嵌套的下一级工作
更新:
协会代码:
宏观循环模型:
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
class宏循环:破坏
接受:mesocycles、:reject_if=>lambda{a | a[:name].blank?}、:allow_destroy=>true的_嵌套_属性
结束
中旋回模式:
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
类Mesocycleclass 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
classworkoutday:destroy
接受:块#的_嵌套的_属性_,:拒绝_if=>lambda{a | a[:name].blank?},:允许_销毁=>true
结束
在B上,您的散列将在包含工作日之前结束
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"}}}})
这有点神秘,很抱歉,但我认为这应该提供一些帮助发布您的关联
模型中的代码
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"}}}})