我想创建一个随机包含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语言。
谢谢, 埃里克
答案 0 :(得分:0)
根据数据库系统的不同,您可以使用order random子句查找15个随机记录。例如,在Postgres中:
Model.order("RANDOM()").limit(15)
给定随机模型,您可以添加一个before_create
方法来设置关联。
答案 1 :(得分:0)
如果Cardpackcard
模型没有执行任何操作,只提供cards
和cardpacks
之间的匹配,则可以使用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