ruby-on-rails – Ruby on Rails:创建子对象
发布时间:2020-12-16 22:16:16 所属栏目:百科 来源:网络整理
导读:我相信这是一个非常简单的问题,但我只是一个新手,所以… 我有一个模型,游戏,其中has_many:桩.堆,反过来,has_many:卡.我可以在创建游戏时填充桩和卡,所以我的代码目前看起来像: class Game ActiveRecord::Base has_many :piles def after_create 1.upto(4)
我相信这是一个非常简单的问题,但我只是一个新手,所以…
我有一个模型,游戏,其中has_many:桩.堆,反过来,has_many:卡.我可以在创建游戏时填充桩和卡,所以我的代码目前看起来像: class Game < ActiveRecord::Base has_many :piles def after_create 1.upto(4) do |num| Pile.new("game_id" => id,"contents" => "c_type_#{num}") end end end class Pile < ActiveRecord::Base has_many :cards belongs_to :game def after_create 1.upto(10) do |num| Card.new("pile_id" => id,"value" => num) end end end class Card < ActiveRecord::Base belongs_to :pile end 现在这一切都很好,但是传递“game_id”=> id当ActiveRecord知道game_id是外键并且应该引用父级游戏时.但是如果我把它关掉,外键最终没有设定.有没有更好的方法来做到这一点? (为了一个奖金,可能更简单的问题;假设游戏也has_one:猴子,我如何最好地从游戏模型中创建猴子?) 解决方法
代替:
Pile.new("game_id" => id,"contents" => "c_type_#{num}") 尝试: piles.create("contents" => "c_type_#{num}") 它会立即保存创建的桩.或者,如果你真的需要这个没有保存(创建的情况),你可以做: new_pile = piles.build("contents" => "c_type_#{num}") 类似于桩类及其卡. 至于has_one:猴子,你可以执行以下操作(从游戏的方法中): create_monkey("some_attr" => "some_value") (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |