我相信这是一个非常简单的问题,但我只是一个新手,所以…
我有一个模型,游戏,其中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")