Ruby / Rails - 每次都没有命中DB的嵌套块?

时间:2009-10-25 06:26:54

标签: ruby-on-rails ruby

不完全确定如何查看,但我无法在任何地方找到解决方案。我想为一组用户分配一系列网站。像这样:

users = User.all
sites = Site.all

users.each do |user|
  sites.each do |site|
     user.websites << site
  end
end

显然,这不起作用,因为我遗漏了一些关于块范围的内容。但是,这有效:

users.each do |user|
  Site.all.each do |site|
    user.websites << site
  end
end

但我正在尝试消除对DB(Site.all.each ...)的额外调用,并在此过程中了解Ruby。非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

我不确定为什么第一次尝试不起作用,但我也不太明白为什么你要单独追加每个网站。这不行吗?

users = User.all
sites = Site.all

users.each do |user|
    user.websites.concat(sites)
end

ruby-doc link to concat

如果它们实际上是哈希(虽然你说它们是数组),你正在寻找的方法是merge

答案 1 :(得分:1)

如果您的用户模型与网站(类名网站)有很多关系,那么您可以这样做

users = User.all
sites = Site.all

users.each do |user|
  user.websites = sites
end

编辑:对于Harpastum:

如果user.websites包含不在Site.all中的项目,您不希望过度编写以下作品。

users = User.all
sites = Site.all

users.each do |user|
  user.websites << sites
end