首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按关联收集rails组

按关联收集rails组
EN

Stack Overflow用户
提问于 2015-08-02 07:47:48
回答 3查看 341关注 0票数 0

我在控制器中有一些集合,如下所示:

代码语言:javascript
复制
def show
  @cave = Cave.includes(cubs: :mamabear).where(id: params[:id]).first
  @cubs = @cave.cubs
  @papabear = Papabear.first
  @dens = Den.where(papabear_id: @papabear.id)
end

现在我正试着把幼崽按洞穴分类,这样我就可以用

代码语言:javascript
复制
@dens.each do |d| 
  d.cubs
end

所以我写了如下:

代码语言:javascript
复制
def show
....
  @dens.each do |den|
    den.cubs = []  ## < --- Den does not have an association with Cub ##
    @cubs.each do |cub|
      den.cubs << cub if cub.mamabear.den_id == den.id
    end
  end

  #reject dens if they don't have cubs
  @dens = @dens.reject { |den| den.cubs.all?(&:blank?) }

end

但是现在我得到了一个未定义的方法‘Den的幼崽’错误,因为Den与幼崽没有关联。如何在没有关联的情况下为每个Den分配一组小熊?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-08-02 08:09:51

他说:我会为den创建一个标准的古巴人协会。可能是一种标准的has_many,所以每个幼崽都有一个den_id。

否则你就搞砸了重新发明轮子。

2:您可能会发现,未定义的方法是'cubs=‘,而不是'cubs’。这是一个重要的区别,因为它说明了当抛出错误时代码正在做什么。

3:如果您真的想忽略第1点,创建您自己的控制器中的任意属性,您可以将其添加到Den模型中。

代码语言:javascript
复制
attr_accessor :cubs
票数 1
EN

Stack Overflow用户

发布于 2015-08-02 08:15:53

如果要在多个地方获取属于cubsden,关联是处理此类场景的最佳方法。如果您不想实现关联。你可以试试这个解决方案

代码语言:javascript
复制
@den_cubs = []
@dens.each do |den|
  cub_for_den= {}  #here we are initializing hash each time for new den
  @cubs.each do |cub|
    cub_for_den[cub.id] = cub if cub.mamabear.den_id == den.id
  end
  @den_cubs << cub_for_den #put the hash in array
end

@den_cubs = @den_cubs.reject { |dc| dc.blank? }

在“秀”页面上,您可以这样做。

代码语言:javascript
复制
@den_cubs.each do |dc|
  dc.each do |k,v|
    # now here you can display all attributes for the cubs
  end
end
票数 1
EN

Stack Overflow用户

发布于 2015-08-02 11:13:33

你有没有考虑过使用“有很多通过”的-association来对待幼崽,->,洞穴,->幼崽?

basics.html#the-has-many-through-association

示例:

代码语言:javascript
复制
class Den
  has_many :mamabears
  has_many :cubs, through: :mamabears
end

class Cup
  belongs_to :mamabear
  has_one :den, through: :mamabear
end

那么你就应该能够做这样的事情:

代码语言:javascript
复制
den.cups #=> [<Cup ...>]
cup.den #=> <Den ...>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31769685

复制
相关文章

相似问题

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