2011-12-13 109 views
0

默認情況下,rails控制器將加載索引操作中的所有關聯對象。我想要做的只是顯示特定的對象。Rails控制器 - 獲取索引操作以僅顯示特定記錄

例如

我有一個叫汽車模型(ID,型號,年份)。我只想列出特定列表中的列表,具體取決於參數。

有幾種方法可以做到這一點,我只是不確定哪個是最好的。

我能:

參數傳遞給鏈接:

cars_path(make: 'Acura') 

,並會給我/汽車/做出=極品

設置路線:(這似乎變得混亂)

match "cars/:make" => "cars#index", constraints: {make: /[A-z]{1,20}/} 

或者我可以爲此做一個單獨的控制器操作

任何有關什麼是最「軌道」的方式來做到這一點的建議? RoR 3.1

回答

2

如果你只是想顯示一個品牌的汽車,最好的網址是:/makes/1-Acura/cars。所以你只需在汽車控制器中獲得這種製造的汽車。

你有沒有一張桌子?或者它只是一個在你的車表中的字符串?我想你應該有一個。

resources :makes do 
    resources :cars 
end 

通過這些途徑,你就必須要測試是否有PARAMS [:make_id]在汽車控制器的索引動作,如果是這種情況,你會得到汽車這樣的:

@cars = Make.find(params[:make_id]).cars 

或者你可以設置你的路線一樣,

resources :makes do 
    scope :module => "make_scope" do 
     resources :cars 
    end 
end 

這種方式,你可以有你的控制器設置這樣的:

controllers 
    - cars_controller.rb 
    - make_scope (folder) 
     - cars_controller.rb 

路徑make_cars_path(@make)將碰到make_scope/cars_controller中的索引操作,因此您不必擔心params [:make_id]的存在,您只需知道您正在使用使。

否則,獲取參數是好的。我認爲定義一個新路線來獲取漂亮的網址並不是一件壞事,這取決於您的過濾器的複雜程度。

3

通常,當我們談論過濾數據時,我更願意通過普通的舊GET變量保持相同的索引動作和過濾參數(沒有額外的路由定義)url?key=val&key-val

這有其中的許多好處:

  • 網址爲書籤,能夠
  • 沒有會話修修補補
  • 我可以重複使用的過濾PARAMS,並通過他們向分頁鏈接和這樣有過濾器按照用戶搜索是按順序

我不想做額外的路由,因爲過濾器的複雜性可以很容易地過高。如果過濾器參數很少,並且您確信自己在做什麼,您可以定義更好的路線url/param/param,但我發現這些情況幾乎沒有。

相關問題