Ruby on rails 子类别循环

Ruby on rails 子类别循环,ruby-on-rails,Ruby On Rails,我有下面的控制器,它检索“子类别”,然后循环遍历每个子类别,获取并将我称之为“圈”的内容存储到一个实例变量中 def show @sub_categories = Category.where(:parent => params[:id]) @sub_categories.each do |sub_cat| i = 1 @circles[i] = Circle.where(:category_id => sub_cat.id)

我有下面的控制器,它检索“子类别”,然后循环遍历每个子类别,获取并将我称之为“圈”的内容存储到一个实例变量中

  def show
    @sub_categories = Category.where(:parent => params[:id])
    @sub_categories.each do |sub_cat|
      i = 1
      @circles[i] = Circle.where(:category_id => sub_cat.id)    
      i++
    end
  end
这是输出错误。我来自PHP,不知道如何正确地执行此操作

categories_controller.rb:9: syntax error, unexpected kEND
在我看来,你应该使用:

为了解决您编写的代码:在Ruby中添加到数组是使用完成的。因此,您可以按如下方式重写代码:

@circles = []
@sub_categories.each do |sub_cat|
  sub_cat.circles.each do |circle| # assumes Category has_many :circles
    @circles << circle
  end
end
要防止发生故障,您必须在控制器中执行以下操作:

@sub_categories = Category.includes(:circles).where(:parent => params[:id])

每个都是迭代器

由于您正在收集所选子类别的圆圈,因此您只需将其写成

@subcategories.collect{|sc| Circle.where(:category_id => sc.id) }

它将返回u个圆数组。

ps。我知道我可以只做@circles=Circle。总之,只是尝试编写一个更有效的查询。请告诉我们错误是什么,并给我们一个回溯,告诉我们它发生在哪一行,否则任何人都很难帮助您。谢谢您x 2,现在我知道如何在Ruby中添加数组。我在你的第一个代码块中遇到了一个错误,但我会努力让它正常工作,因为这似乎是实现这一点的更正确的方法。我认为,所以我需要清理它。我不确定这是否会像我认为的那样,在子类别中循环,并显示这些子类别中的任何圆圈更正:当然不会,因为我需要实例变量@sub_categories来执行子类别循环。在这种情况下,仅仅设置
@sub_categories
,还不够吗?我认为你不需要
@圆圈
。您可以在视图中执行与我上面显示的相同的嵌套迭代。因为在您的
类别
模型中,
有许多:圆
。检查ActiveRecord关系的基础知识。此代码的问题在于
循环。其中
不返回
循环
对象,而是返回
ActiveRecord::relationship
。因此,您不会得到一个圆圈数组,而是一个
ActiveRecord::Relation
s数组。
@sub_categories = Category.includes(:circles).where(:parent => params[:id])
@subcategories.collect{|sc| Circle.where(:category_id => sc.id) }