2012-06-03 25 views
3

我有一個現有的基於搜索的應用程序正在移植到Rails。由於傳統的自然,我需要保留的形式存在的網址:欄杆路由:組合索引並顯示動作

/books   # search all books 
/books/fiction # search books with :category => fiction 

我的這些映射到我的控制器的index & show行動,並能正常工作,但代碼和標記用於顯示所有書籍與特定類別的書籍幾乎完全相同。

結合showindex操作的最佳方法是什麼?對於此應用程序index實際上是show:category => nil的退化情況。

我可以這樣做:

def index 
    show 
    render "show" 
end 

但似乎有點難看。有沒有更習慣於在Rails中做到這一點的方法?

+0

不顯示已經渲染顯示? –

+0

也許,但後來它抱怨說找不到index.html.erb。 –

+0

IIRC你需要「返回節目」,但我可能會誤解。 –

回答

4

爲什麼不能簡單地用一個路由具有可選類別:

get '/books(/:category)' => 'books#search' 

,然後在BooksController

def search 
    # Look at params[:category], if it is there then use it 
    # to search, if it isn't there then list 'em all. 
    @results = ... 
end 

那麼你就只有一個途徑,一個控制器,一個視圖(統治他們所有和在黑暗中綁定他們)並且沒有重複或欺騙。

+1

+1,似乎是最合理的。再加上你說「騙子」。 –

+0

@Dave:這是我最喜歡的單詞之一。 –

+0

啊,這很好。我不知道(/:可選)語法,它很好地映射到我現有的Wicket URL。最初我將它作爲資源安裝,但是明確列出GET路徑很好。謝謝。 –