加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读