ruby-on-rails – Ruby on Rails:创建子对象

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – Ruby on Rails:创建子对象前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我相信这是一个非常简单的问题,但我只是一个新手,所以…

我有一个模型,游戏,其中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")
原文链接:https://www.f2er.com/ruby/266211.html

猜你在找的Ruby相关文章