2

我想创建一个包含 15 张卡片的随机包,应该在创建时在 cardpacks_controller 中调用它。我有以下型号:

卡片:

class Card < ActiveRecord::Base
  # relations
  has_many :cardpacks, through: :cardpackcards
  belongs_to :cardset
end

卡包:

class Cardpack < ActiveRecord::Base
  #relations
  has_many :cards, through: :cardpackcards
  belongs_to :cardset

  # accept attributes
  accepts_nested_attributes_for :cards
end

卡包卡:

class Cardpackcard < ActiveRecord::Base
  #relations
  belongs_to :card
  belongs_to :cardpack
end

卡组:

class Cardset < ActiveRecord::Base
  #relations
  has_many :cards
  has_many :cardsets
end

如何创建具有随机 card_id 值和相同 cardpack_id 的 15 个 Cardpackcards 记录(因此它们属于同一个包)

我看过复杂的表单系列教程,但它让我无法理解如何解决这个问题。

我希望任何人都可以帮助我解决这个问题,并让我对 Rails 语言有更多的了解。

谢谢,埃里克

4

2 回答 2

0

根据数据库系统,您可能可以使用 order random 子句来查找 15 条随机记录。例如,在 Postgres 中:

Model.order("RANDOM()").limit(15)

给定随机模型,您可以添加一个before_create设置关联的方法。

于 2012-09-08T22:19:18.597 回答
0

如果模型除了提供andCardpackcard之间的匹配之外什么都不做,您可以使用关联来代替,这会简化一些事情。cardscardpackshas_and_belongs_to_many

没有它,控制器代码可能看起来像这样:

cardset  = Cardset.find(params[:cardset_id])
cardpack = Cardpack.create(:cardset => cardset)

15.times do
  cardpack.cardpackcards.create(:card => Card.create(:cardset => cardset))
end
于 2012-09-08T22:31:05.317 回答