1

(例は私のユースケースの簡素化であることに注意してください。)どのように私のモデルの属性が含まれているデフォルトのリソースフルルートを持つことができますか?

私はモデルイベントと一つのイベントを示すためのデフォルトルートがあります。今

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

、イベントにはyearという名前の属性がありますが、も既にです。

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

2番目の亜種がデフォルトであるため、私はredirect_to @eventのようなコードを使用して、そのバリエーション(例: http://localhost:3000/events/2012/1)。

どこで定義しますか?

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

...しかし、それはparams[:id]は、文字列1分の2012でいっぱいになります:

はこれまでのところ、私はそうのようなモデルでto_paramを上書きしようとしました。

私はparams[:year]がする必要がありながらparams[:id]はまだになりたいです。

これを達成するための標準的な方法は、Railsですか?

...または私はモデルのカスタムメソッドを記述し、このようなものを発行して、それを呼び出す必要があります:redirect_to @event.custom_method_to_create_long_url_variant

このような方法は、迅速に実装されますが、Railsは経由要件を扱うことができる場合簡単な設定であれば、他のすべてのコードを変更せずに済ませることができます。

EDIT:(:idと:年)

私は私のparamsは値を保有することを見出しを変更すると、期待どおりget :show, id: @event FROM get :show, id: @event.id TO機能テストでを取得します。

今の質問は次のとおりです。

は、それはそれを行うためだけの方法ですか私はまだget :show, id: @eventをサポートすることができますか?このような

答えて

1

何か、:

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

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

ので、あなたのコントローラで取得

Started GET "/events/2012/12" for 127.0.0.1 at 2012-03-14 17:25:44 +0400 
Parameters: {"year"=>"2012", "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 
関連する問題