【发布时间】:2012-03-14 10:57:08
【问题描述】:
(请注意,这些示例是对我的用例的简化。)
我有一个模型事件和显示一个事件的默认路由:
/events/:id(.:format) ----> activities#show
现在,该事件有一个名为 year 的属性,我也已经接受以下路线:
/events/:year/:id(.:format) ----> activities#show
由于第二个变体应为默认值,我希望像 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,而params[:year] 应该是2012。
Rails 是否提供标准方法来完成此任务?
...或者我是否必须为模型编写一个自定义方法并通过发出如下内容来调用它:redirect_to @event.custom_method_to_create_long_url_variant
这样的方法会很快实现,但是如果 Rails 可以通过简单的设置来处理这个需求,那么我就可以让几乎所有其他代码保持不变。
编辑:
我发现我的params 在将功能测试中的get 从get :show, id: @event 更改为get :show, id: @event.id 时按预期保留了值(:id 和:year)。
现在的问题是:
这只是这样做的方式还是我仍然可以支持get :show, id: @event?
【问题讨论】:
标签: ruby-on-rails parameters attributes rails-routing restful-url