0

我正在尝试使用 Ancestry gem 检索根类别 - 子类别。我在rails控制台中试过这个,它有效。它检索子 ID 没有问题,但是当我在控制器(实际应用程序)中使用时,它显示这样的错误:

   Mysql2::Error: Operand should contain 1 column(s): SELECT COUNT(*) FROM `categories`  WHERE (id = 2,7,15,16)

控制器中的代码:

 @category = Category.find_by_name(params[:category])
 @sub_ids = @category.child_ids 
 @subcat = Category.where("id = ?", @sub_ids)  

谢谢 (((((:

4

2 回答 2

4

很明显,提供名称的类别不存在(因此Category.find_by_name方法返回nil)。您可能没有@params正确设置实例变量。

关于您的第二个错误,代码中的最后一行应该是:

@subcat = Category.where(id: @sub_ids)

或者,为了更简单,您可以使用现有的库来处理这种逻辑,例如acts_as_tree

于 2014-01-21T08:37:25.913 回答
2

显然Category.find_by_name(@params)nil您分配nil@category.

@category = Category.find_by_name(@params) # => nil

然后在下一行你调用(即)#child_ids上的方法,当然没有定义。nilnil.child_ids

此外,如果@sub_ids是一个 ID 数组,则在最后一行中您必须执行以下操作:

@subcat = Category.where(id: @sub_ids)
于 2014-01-21T08:36:59.913 回答