Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 使用创建!接受\u时,启用嵌套的\u属性_Ruby_Ruby On Rails 3 - Fatal编程技术网

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
类Mesocycle'mesocycles.phase\u编号ASC' 有很多:锻炼日,:依赖=>:破坏 接受\u嵌套的\u属性\u用于:训练\u天,:允许\u销毁=>true 结束 训练日模式:

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
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"}}}})