我正在尝试使用祖先GEM检索root类别 - 子类别。我在Rails控制台中尝试了此操作。它毫无问题地检索了Sub 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)
谢谢((((((:
很明显,没有提供名称的类别不存在(因此Category.find_by_name
方法返回nil
)。您可能无法正确设置@params
实例变量。
关于您的第二个错误,代码中的最后一行应该是:
@subcat = Category.where(id: @sub_ids)
或更简单,您可以使用现有库来处理这种逻辑,例如ACTS_AS_TREE。
显然Category.find_by_name(@params)
返回nil
,因此在第一行中,您将nil
分配给@category
。
@category = Category.find_by_name(@params) # => nil
然后在下一行上,您在nil
上调用#child_ids
方法(即nil.child_ids
),当然未定义。
另外,如果@sub_ids
是ID数组,则在您的最后一行中必须执行:
@subcat = Category.where(id: @sub_ids)