2014-02-19 35 views
0

我想避免一些寶石,所以我想出了這個解決方案在多個模型之間進行搜索。rails 3在多個模型之間搜索

但它似乎只適用於列出的第一個型號。

SearchController

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 

搜索#指數

<%if @products.present?%> 
     <%= render partial: "products/found" %> 
    <%end%> 

    <%if @manufacturer_name.present?%> 
     <%= render partial: "products/foundmanufacturers" %> 
    <%end%> 

    <%if @category_name.present?%> 
     <%= render partial: "products/foundmanufacturers" %> 
    <%end%> 

我爲每個模型準備分隔部分。

但是,當我搜索名稱definetely應該在所有類別。但沒有找到結果,只有當我運行搜索產品名稱。然後我得到我想要的結果。

任何提示將是偉大的。 TNX

+0

搜索產品或類別名稱中有名稱的產品,然後返回產品? – Amar

+0

@Amar我在三種模型中啓用了此搜索。產品,類別,製造商。所有這些都有字段名稱。在一個搜索表單中搜索所有這些開始。檢查此:http://darbs.ecotechno.lv/鍵入「pez」它將返回產品名稱,然後「CMI」應返回製造商名稱,但沒有。 – Edgars

回答

1

它只是重構創建名稱範圍,想如下圖所示

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方法,最好是寫範圍,除非你正在做一些複雜的檢查,

二試,看看在控制檯,你會得到基於你的搜索參數的結果?

+0

Tnx,我應該在模型中添加第一行? – Edgars

+0

是第一行在模型中 – Amar