1

(注意例子是我用例的簡化)我如何使默認的足智多謀的路線包含我的模型的屬性?

我有一個模型事件和用於顯示一個事件的默認路由:現在,

/events/:id(.:format) ----> activities#show

事件具有名爲year的屬性,並且我也是已經接受以下路由:

/events/:year/:id(.:format) ----> activities#show 0123因爲第二個變體應該是默認的,所以我希望代碼如redirect_to @event將用戶引導到該變體(例如, http://localhost:3000/events/2012/1)。

我在哪裏定義?

到目前爲止,我已經試過覆蓋to_param模型像這樣:

def to_param 
    "#{self.year}/#{self.id}" 
end 

...但是,這會導致params[:id]來填充字符串一分之二千〇一十二

我想params[:id]仍然是而params[:year]應該。

Rails是否提供了一個標準的方法來實現這個目標?

...還是我將不得不寫的模型的自定義方法,並通過發出這樣的呼籲是:redirect_to @event.custom_method_to_create_long_url_variant

這種方法會很快實現,但如果Rails可以通過處理要求一個簡單的設置,它可以讓我幾乎不用任何其他代碼。

編輯:

我發現我params保存的值更改得到在功能測試從get :show, id: @event TO get :show, id: @event.id當預期(:年:ID和)。

現在的問題是:

的是,短短的方式做到這一點還是我仍然可以支持get :show, id: @event

回答

1

的東西,像這樣:

match "/events(/:year)/:id(.:format) => "activities#show" 

,並獲得在你的控制器

Started GET "/events/2012/12" for 127.0.0.1 at 2012-03-14 17:25:44 +0400 
Parameters: {"year"=>"2012", "id"=>"12"} 

或沒有一年

Started GET "/events/12" for 127.0.0.1 at 2012-03-14 17:25:44 +0400 
Parameters: {"id"=>"12"} 

的話,你可以在你的控制器使用

params[:id] 
params[:year] 

而且url_helper

match "/events(/:year)/:id(.:format) => "activities#show", :as => :my_event 

my_event_path(2012, 12) #=> /eventes/2012/12 
my_event_path(@event.id) #=> /events/12 
相關問題