Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.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_Plugins_Nested - Fatal编程技术网

Ruby on rails rails在类别中搜索子类别

Ruby on rails rails在类别中搜索子类别,ruby-on-rails,ruby,plugins,nested,Ruby On Rails,Ruby,Plugins,Nested,很棒的嵌套集插件,目前,如果我选择一个子类别作为我的类别id,我不能按父类别搜索 Category.parent Category.Child 我选择Category.child作为项目所在的类别。因此,现在我的物品中存储了4个category_id 如果我转到rails应用程序中的某个页面,比如说Category页面,我在Category.parent的页面上,我希望显示具有所有子体的Category_id的产品 因此,理想情况下,我希望有一个可以考虑后代的find方法。您可以通过

很棒的嵌套集插件,目前,如果我选择一个子类别作为我的类别id,我不能按父类别搜索

Category.parent
     Category.Child
我选择Category.child作为项目所在的类别。因此,现在我的物品中存储了4个category_id

如果我转到rails应用程序中的某个页面,比如说Category页面,我在Category.parent的页面上,我希望显示具有所有子体的Category_id的产品

因此,理想情况下,我希望有一个可以考虑后代的find方法。您可以通过调用root.subjects(内置插件方法)获得根的子代

我该如何做才能查询一个查找,从而获取根的后代,而不是它现在所做的事情,除非产品具有category.parent的特定category\u id,否则它什么都没有

我希望我在这里说得很清楚。我需要找到一种方法来创建一个find方法或命名的_范围,该方法可以查询并返回一个对象数组,这些对象的id对应于根的后代,或者如果我有任何其他选项,它们是什么

我考虑在我的products表中创建一个字段,比如parent_id,它可以跟踪父对象,这样我就可以创建两个命名的作用域,一个查找父对象,另一个查找子对象并链接它们

我知道我可以为每个子级创建一个命名范围,并为多个子级将它们链接在一起,但这似乎是一个非常繁琐的过程,而且,如果添加更多子级,则需要指定更多的命名范围

//this is what i tried first
@category = Category.find(params[:id])
@child_products = @category.descendants.products

//this actually works but only for one
@child_products = @category.descendants.first.products

因为一个产品属于一个类别,而一个类别有很多产品。但是,后代函数返回所有后代的数组。如何筛选这些产品并获得组合产品?

将命名范围移动到您的
产品
模型,因为这正是您试图显示的内容

# product.rb    
named_scope :for_category_ids, lambda {|ids| {:conditions => {:category_id => ids}}}
然后在控制器中:

@products = Product.for_category_ids(@category.descendants.map(&:id))

嘿,如果一个类别有多个子类别,jdl会这样做吗?Mysql::错误:操作数应包含1列:从
products
WHERE(category_id=4,5)中选择*限制0,我得到的是4。谢谢你的回复!是的,它应该适用于任何ID列表。当我第一次发布这篇文章时,我在命名范围中遗漏了一个括号。再试一次,看看它是否适合你。啊,谢谢jdl,我很感激。我已将命名的_范围更改为命名的_范围:对于_category_id,lambda{| ids{:conditions=>[“category_id=?”,(ids)]},这就是它失败的原因。谢谢。