2010-06-11 18 views
3

我創建了以下路線:如何在導軌中創建自定義路線,並傳遞現有模型的ID?

map.todo "todo/today", 
      :controller => "todo", 
      :action => "show_date" 

原來,「SHOW_DATE」行動和相關視圖將顯示當天所有所有廣告活動相關的活動。

這最終導致數據庫非常緩慢......它會產生大約30條記錄,但仍然很慢。

所以,我正在考慮創建一個部分,首先單獨列出這些活動。

如果有人用CAMPAIGN_ID = 1相關的鏈接上點擊,我希望它去下面的路線:

todo/today/campaign/1 

然後,我想知道如何知道「1」是CAMPAIGN_ID在控制器中,然後做它的事情。

我想要一個獨特的URL的原因是,我可以緩存這個列表。我必須繼續回到這一點,它很慢。

注意:這可能是問題的實際是我寫了一個緩慢的查詢和sqlite並不代表它將如何在生產中,在這種情況下,這種解決方法是不必要的,但現在,我需要一種快速回到整個列表的方式。

回答

4

@Damien上面的代碼是正確的,但不完整。它應該是:

map.todo "todo/today/campaign/:id", :controller => "todo", :action => "show_date" 
在你的意見,所有您需要做的

是:

<%= link_to "Campaign 1", todo_path(:id => 1) %>

或者乾脆

<%= link_to "Campaign 1", todo_path(1) %>

和特定活動ID可以使用取params[:id]在你的行動。

是的,sqlite沒有生產準備。

編輯:後半部分是很容易實現:

但是,你要稍微改變路線, 路線現在成了,

map.todo "todo/today/:campaign/:id", :controller => "todo", :action => "show_date" 
在你的看法

<%= link_to "Campaign 1", todo_path(:campaign => "campaign", :id => 1) %> 

在你的待辦事項控制器,SHOW_DATE行動:

def show_date 

#IF YOU ARE USING THIS REPEATEDLY IN LOTS OF DIFFERENT ACTIONS THEN A BETTER PLACE FOR THIS WOULD BE AS A HELPER IN application_controller.rb 

if params[:id].nil? && params[:campaign].nil? 
    #DO SOMETHING WHEN BOTH ARE NIL, 
elsif params[:campaign]!="campaign" 
    #DO SOMETHING WITH CAMPAIGN BEING SOMETHING OTHER THAN "CAMPAIGN" 
elsif params[:campain]=="campaign" && params[:id].nil? 
    #DO SOMETHING WITH ID BEING NIL. 
else 
    #FIND YOUR CAMPAIGN HERE. 
end 
end 

希望這會有所幫助。 :)

+0

謝謝...讓我試試這個 - 想知道是否應該採取任何行動之前先移植到mysql – Angela 2010-06-16 03:41:33

+0

我建議去postgresql。如果您有任何在heroku上部署應用程序的計劃。 – 2010-06-16 06:02:22

+0

是的,把它帶到heroku ....這不會改變這個解決方案,是嗎? – Angela 2010-06-19 18:01:43

0

只是以下幾點:

map.todo "todo/today/:id", 
     :controller => "todo", 
     :action => "show_date" 

這將創建/todo/today/:id的網址,讓id是無論你在URL中設置。
然後,您可以使用params[:id]在您的控制器中訪問它。

您可能有興趣閱讀Rails Routing from the Outside In,尤其是資源部分。

+0

謝謝讓我試試這個 – Angela 2010-06-16 03:41:09

相關問題