2010-06-17 61 views
0

我有一個帶有「description」字段的模型「Product」。現在,我希望在索引頁面中有一個鏈接,單擊該鏈接時將顯示說明爲空的所有產品(空)。如何使用named_scope過濾我的模型中的記錄

在模型中我已經定義了一個named_scope這樣

named_scope :no_description,  :conditions => { :description => "" } 

我已經檢查了named_scope工作通過調用Product.no_description.count在控制檯上。

據我所知,控制器然後應該處理鏈接上的「索引」操作的過濾器請求,但能夠區分它與查看所有產品的默認值。

def index 
    @products = Product.all 
    ... 

我的問題越來越控制器處理不同的要求,什麼路線設置爲視圖上的鏈接,然後在視圖實際的鏈接。希望我解釋我的問題。

回答

1

如果你的鏈接傳入的參數,你可以檢查這一點,在索引操作使用命名範圍:

def index 
    if params[:no_description] 
     @products = Product.no_description 
    else 
     @products = Product.all 
    end 
end 

在你看來,你可以使用類似:

link_to('No description', products_path(:no_description => 1)) 
+0

我認爲你有一個錯字,它應該是'Product.all'等(單數)。另外,'link_to'末尾有一個缺失的括號。 – 2010-06-17 09:55:20

+0

@John我修復了這些錯別字。謝謝。 – 2010-06-17 10:04:49

1

您可以採取兩種基本方法。您可以設置新的路由和控制器操作以顯示無描述的產品,也可以在超鏈接上使用查詢字符串參數進行區分。我會採用第二種方法來避免因操作太多而使控制器混亂。

您的鏈接將會是這個樣子,假設你使用RESTful routing

<%= link_to 'Products Without Descriptions', products_path(:filter => true) %> 

而這裏的控制器動作,這看起來簡單的參數是否存在(即不關心什麼價值它有):

def index 
    if params[:filter] 
    @products = Product.no_description 
    else 
    @products = Product.all 
    end 
    ... 
end 
+0

感謝約翰,工作就像一個魅力 – kibyegon 2010-06-17 09:46:07

相關問題