Rails - 使用has_many_through关系在create上插入许多随机项

时间:2012-09-08 22:15:43

标签: ruby-on-rails has-many-through

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

卡:

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

Cardpack:

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

  # accept attributes
  accepts_nested_attributes_for :cards
end

Cardpackcards:

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

Cardsets:

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

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

我已经看了complex form series教程,但是对于如何解决这个问题我没有理解。

我希望任何人都可以帮我解决这个问题,并让我更多地了解rails语言。

谢谢, 埃里克

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

如果Cardpackcard模型没有执行任何操作,只提供cardscardpacks之间的匹配,则可以使用has_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