2013-11-04 52 views
6

如果用戶選擇預定義的過濾器鏈接,我的索引將如何根據該請求顯示結果?通過使用鏈接導入過濾器索引結果(無下拉)

<h1>Products</h1> 
<% @products.each do |product| %> 
<%= link_to product.name, product_path(product) %> 
<% end %> 

<h2>Find Product by Category</h2> 
Electronics 
Apparel 
Books 

例如,我會怎麼做「電子」鏈接到產品指標進行過濾,只包括產品的「電子產品」的範疇? 「類別」字段/列已在我的數據庫/模型中定義。

這是目前我什麼控制器的樣子:

def index 
    @products = Product.all 
end 

感謝。

回答

13

將鏈接指向產品鏈接,但將類別添加爲url參數。

然後在您的控制器中,如果該參數存在,則基於該參數篩選結果。如:

查看:

<h2> Find Product by Category </h2> 
    <%= link_to "Electronics", products_path(:category=>"electronics") 

控制器

def index 
    if params[:category] 
    @products = Product.where(:category => params[:category]) 
    else 
    @products = Product.all 
    end 
end 

基於由egyamado評論:

如果你想添加的提示信息,將是這樣的:

def index 
    if params[:category] 
    @products = Product.where(:category => params[:category]) 
    flash[:notice] = "There are <b>#{@products.count}</b> in this category".html_safe 
    else 
    @products = Product.all 
    end 
end 

如果你只是想顯示的消息,如果沒有產品,然後只需添加if @products.empty?到閃存指定的結束

或者你可以把它完全有條件的,如果你想,如果沒有產品來顯示錯誤信息並通知是否有產品

def index 
    if params[:category] 
    @products = Product.where(:category => params[:category]) 
    if @products.empty? 
     flash[:error] = "There are <b>#{@products.count}</b> in this category".html_safe 
    else 
     flash[:notice] = "There are <b>${@products.count}</b> in this category".html_safe 
    end 
    else 
    @products = Product.all 
    end 
end 
+0

正是我想要的。萬分感謝。 –

+1

Dude ...我一直在尋找這個確切的答案,看起來像兩個月。確切的問題,完美的答案。非常感謝。 現在似乎很簡單,我正在看它。 – etusm

+0

感謝@trh,投票。在您的解決方案中,當選擇一個類別時,所有相關產品都將顯示出來。當沒有選擇類別時,顯示所有產品。但是,如何選擇一個沒有產品的產品類別,讓我們假設它顯示所有帶有閃光信息的產品可以說:「沒有產品可用於電子產品!」? 謝謝! – egyamado

0

非常感謝您的留言。這對我的需求也很完美

我在鏈接中使用它 <td><%= link_to 'Show', candidates_path(:atc_name=>(atc.name)) %></td>