Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.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 3在多个模型之间搜索_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails rails 3在多个模型之间搜索

Ruby on rails rails 3在多个模型之间搜索,ruby-on-rails,ruby,Ruby On Rails,Ruby,我想避免一些宝石,所以我想出了这个解决方案来搜索多个模型 但它似乎只适用于列出的第一个模型 搜索控制器: def index @products = Product.search(params[:search]).paginate(:per_page => 5, :page => params[:page]) @manufacturer_name = Manufacturer.search(params[:search]).paginate(:per_page =&g

我想避免一些宝石,所以我想出了这个解决方案来搜索多个模型

但它似乎只适用于列出的第一个模型

搜索控制器

def index
    @products = Product.search(params[:search]).paginate(:per_page => 5, :page => params[:page])
    @manufacturer_name = Manufacturer.search(params[:search]).paginate(:per_page => 5, :page => params[:page])
    @category_name = Category.search(params[:search]).paginate(:per_page => 5, :page => params[:page])
  end
在我的3款车型中,我都是这样的:

def self.search(search)  
    if search  
      where('name LIKE ? ', "%#{search}%") 
    else  

    scoped  
    end   
搜索#索引


我为每一个模型分别准备了部分

但当我搜索名字的时候,它肯定应该在所有类别中。但并没有找到结果,只有在我运行搜索产品名称时。然后我得到我想要的结果


任何小费都行。Tnx

它只是重构创建名称范围,如下所示

 scope :by_name,lambda{|name| where("name like (?)","%#{name}%") if name.present?}
 # In controller
 Product.by_name(params[:search]).paginate(:per_page => 5, :page => params[:page])
不需要在模型中使用
search
方法,最好编写范围,除非您正在进行一些复杂的检查


第二,尝试在控制台中查看您是否根据搜索参数获得搜索结果?

在产品或类别名称中有名称的产品中搜索,然后返回产品?@Amar我在三种型号中启用了此搜索。产品、类别、制造商。所有这些都有字段名。在一个搜索表单中搜索所有这些。选中此项:键入“pez”它将返回产品名称,然后“CMI”应返回制造商名称,但不返回。Tnx,我应在模型中添加的第一行?
 scope :by_name,lambda{|name| where("name like (?)","%#{name}%") if name.present?}
 # In controller
 Product.by_name(params[:search]).paginate(:per_page => 5, :page => params[:page])