(例は私のユースケースを単純化したものであることに注意してください。)
モデルイベントと、1つのイベントを表示するためのデフォルトルートがあります。
/events/:id(.:format) ----> activities#show
現在、イベントにはyearという名前の属性があり、私はすでに次のルートも受け入れています。
/events/:year/:id(.:format) ----> activities#show
2番目のバリアントがデフォルトになるためredirect_to @event
、ユーザーをそのバリアントに誘導するようなコードが必要です(例:http:// localhost:3000 / events / 2012/1)。
どこで定義しますか?
これまでのところ、私はto_param
次のようにモデルを上書きしようとしました:
def to_param
"#{self.year}/#{self.id}"
end
...しかし、それはparams[:id]
文字列2012/1で埋められます。
私params[:id]
はまだ1になりたいのですが、 2012年params[:year]
になるはずです。
Railsはこれを達成するための標準的な方法を提供しますか?
...または、モデルのカスタムメソッドを記述し、次のようなものを発行して呼び出す必要がありますか?redirect_to @event.custom_method_to_create_long_url_variant
このようなメソッドはすぐに実装されますが、Railsが単純な設定で要件を処理できる場合は、他のほとんどすべてのコードをそのままにしておくことができます。
編集:
機能テストのgetをFROMTOparams
に変更すると、期待どおりに値(:idと:year)が保持されていることがわかりました。get :show, id: @event
get :show, id: @event.id
今の質問は:
それはそれを行うための方法ですか、それとも私はまだサポートできget :show, id: @event
ますか?