Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 按关联列出的rails组集合_Ruby On Rails_Ruby_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 按关联列出的rails组集合

Ruby on rails 按关联列出的rails组集合,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,我在控制器中有一些集合,如下所示: 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 现在我试着按巢穴对幼崽进行分类,这样我就可以用 @dens.each do |d| d.cubs

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

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
现在我试着按巢穴对幼崽进行分类,这样我就可以用

@dens.each do |d| 
  d.cubs
end
所以我写了以下内容:

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
def显示
....
@巢穴。每个巢穴|
den.cubs=[]。<---den与Cub没有关联##
@幼崽。每只幼崽|

den.cubs1:我会为den创建一个标准的幼仔协会。可能一个标准有很多巢穴,所以每只幼仔都有一个巢穴id

否则的话,你就是在胡闹着重新发明轮子

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

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

attr_accessor :cubs

1:我会为兽穴创建一个标准的幼崽协会。可能一个标准有很多巢穴,所以每只幼仔都有一个巢穴id

否则的话,你就是在胡闹着重新发明轮子

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

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

attr_accessor :cubs

1:我会为兽穴创建一个标准的幼崽协会。可能一个标准有很多巢穴,所以每只幼仔都有一个巢穴id

否则的话,你就是在胡闹着重新发明轮子

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

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

attr_accessor :cubs

1:我会为兽穴创建一个标准的幼崽协会。可能一个标准有很多巢穴,所以每只幼仔都有一个巢穴id

否则的话,你就是在胡闹着重新发明轮子

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

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

attr_accessor :cubs

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

@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? }

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

@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? }

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

@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? }

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

@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? }

你有没有考虑过在幼崽->巢穴和巢穴->幼崽方面使用“有很多通过”关联

示例:

class Den
  has_many :mamabears
  has_many :cubs, through: :mamabears
end

class Cup
  belongs_to :mamabear
  has_one :den, through: :mamabear
end
然后,您应该能够执行以下操作:

den.cups #=> [<Cup ...>]
cup.den #=> <Den ...>
den.cups#=>
cup.den#=>

您是否考虑过在幼崽->巢穴和巢穴->幼崽方面使用“有很多通过”关联

示例:

class Den
  has_many :mamabears
  has_many :cubs, through: :mamabears
end

class Cup
  belongs_to :mamabear
  has_one :den, through: :mamabear
end
然后,您应该能够执行以下操作:

den.cups #=> [<Cup ...>]
cup.den #=> <Den ...>
den.cups#=>
cup.den#=>

您是否考虑过在幼崽->巢穴和巢穴->幼崽方面使用“有很多通过”关联

示例:

class Den
  has_many :mamabears
  has_many :cubs, through: :mamabears
end

class Cup
  belongs_to :mamabear
  has_one :den, through: :mamabear
end
然后,您应该能够执行以下操作:

den.cups #=> [<Cup ...>]
cup.den #=> <Den ...>
den.cups#=>
cup.den#=>

您是否考虑过在幼崽->巢穴和巢穴->幼崽方面使用“有很多通过”关联

示例:

class Den
  has_many :mamabears
  has_many :cubs, through: :mamabears
end

class Cup
  belongs_to :mamabear
  has_one :den, through: :mamabear
end
然后,您应该能够执行以下操作:

den.cups #=> [<Cup ...>]
cup.den #=> <Den ...>
den.cups#=>
cup.den#=>

您无法使用
den.cubs
实现此目的。您正在将数组初始化为
den.cubs
,但无法对den执行此操作,因为它是活动记录对象,您需要一些东西来生成散列并每次插入数组。数组应在den循环外部初始化,在显示页面的循环中使用该数组。@Athar您能给我举个例子吗?当然,我会尝试在下面的答案中复制您的案例。可能是一些错误。但是我们可以随时改进。使用
den.cubs
无法实现这一点。您正在将数组初始化为
den.cubs
,但无法对den执行此操作,因为它是活动记录对象,您需要一些东西来生成散列并每次插入数组。数组应在den循环外部初始化,在显示页面的循环中使用该数组。@Athar您能给我举个例子吗?当然,我会尝试在下面的答案中复制您的案例。可能是一些错误。但是我们可以随时改进。使用
den.cubs
无法实现这一点。您正在将数组初始化为
den.cubs
,但无法对den执行此操作,因为它是活动记录对象,您需要一些东西来生成散列并每次插入数组。数组应在den循环外部初始化,在显示页面的循环中使用该数组。@Athar您能给我举个例子吗?当然,我会尝试在下面的答案中复制您的案例。可能是一些错误。但是我们可以随时改进。使用
den.cubs
无法实现这一点。您正在将数组初始化为
den.cubs
,但无法对den执行此操作,因为它是活动记录对象,您需要一些东西来生成哈希并每次插入数组。数组应为init