覆盖Rails默认路由助手

时间:2012-03-16 14:18:48

标签: ruby-on-rails ruby ruby-on-rails-3

我正在编写一个应用程序,我需要覆盖模型的默认路由助手。因此,如果我有一个名为Model的模型,则使用相应的帮助程序model_path()生成“/ model / [id]”。我想覆盖该帮助程序以生成“/something/[mo​​del.name]”。我知道我可以在视图帮助器中执行此操作,但有没有办法在路由级别覆盖它?

2 个答案:

答案 0 :(得分:3)

您可以在模型上定义to_param。它的返回值将在生成的URL中用作id。

class Thing
  def to_param
    name
  end
end

您可以调整路线以适应您的资源范围

scope "/something" do
  resources :things
end

或者,您也可以使用子资源。

最后,您需要调整控制器,因为Thing.find(params[:id])显然无效。

class ThingsController < ApplicationController
  def show
    @thing = Thing.where(:name => params[:id).first
  end
end

您可能希望确保name的{​​{1}}是唯一的,因为如果不是,您会发现奇怪的事情。

为了避免麻烦自己实现所有这些,你可能也会对friendly_id感兴趣,它会给你这个和一些额外的行为(例如使用生成的slu))

答案 1 :(得分:0)

您需要routes.rb中的范围

scope "/something" do
  resources :models
end