首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails -在create with has_many_through relation上插入许多随机项

Rails -在create with has_many_through relation上插入许多随机项
EN

Stack Overflow用户
提问于 2012-09-09 06:15:43
回答 2查看 84关注 0票数 2

我想创建一个由15张卡片组成的随机包,这些卡片应该在创建时在cardpacks_controller中调用。我有以下模型:

卡片:

代码语言:javascript
复制
class Card < ActiveRecord::Base
  # relations
  has_many :cardpacks, through: :cardpackcards
  belongs_to :cardset
end

卡片盒:

代码语言:javascript
复制
class Cardpack < ActiveRecord::Base
  #relations
  has_many :cards, through: :cardpackcards
  belongs_to :cardset

  # accept attributes
  accepts_nested_attributes_for :cards
end

卡片卡:

代码语言:javascript
复制
class Cardpackcard < ActiveRecord::Base
  #relations
  belongs_to :card
  belongs_to :cardpack
end

卡片集:

代码语言:javascript
复制
class Cardset < ActiveRecord::Base
  #relations
  has_many :cards
  has_many :cardsets
end

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

我看过complex form series教程,但它没有让我理解如何解决这个问题。

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

谢谢,埃里克

EN

回答 2

Stack Overflow用户

发布于 2012-09-09 06:19:19

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

代码语言:javascript
复制
Model.order("RANDOM()").limit(15)

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

票数 0
EN

Stack Overflow用户

发布于 2012-09-09 06:31:05

如果Cardpackcard模型只提供cardscardpacks之间的匹配,那么您可以使用has_and_belongs_to_many关联,这将稍微简化一些事情。

如果没有它,控制器代码可能如下所示:

代码语言:javascript
复制
cardset  = Cardset.find(params[:cardset_id])
cardpack = Cardpack.create(:cardset => cardset)

15.times do
  cardpack.cardpackcards.create(:card => Card.create(:cardset => cardset))
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12334917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档