Rails 3.1 - 如何使用自定义路由正确重定向

时间:2011-10-11 15:13:36

标签: ruby-on-rails

我有一个带有'customURL'字段的Pages模型。我可以在'/:customurl'上进行页面#show。但是因为我已经定义了页面在路径中显示的方式,我的创建操作现在会将成功重定向到错误的路径。在保存时,我应该更改为最干净地修正重定向以指向'/:customurl'?

控制器:

def create
  @page = Page.new(params[:page])

  respond_to do |format|
    if @page.save
      format.html { redirect_to page_url, notice: 'Page was successfully created.' }
      format.json { render json: @page, status: :created, location: @page }
    else
      format.html { render action: "new" }
      format.json { render json: @page.errors, status: :unprocessable_entity }
    end
  end
end

路线:

resources :pages
...
get "/:customURL" => "pages#show"

谢谢!

1 个答案:

答案 0 :(得分:1)

routes.rb中,您可以添加魔术助手。

get "/:customURL" => "pages#show", :as => :custom

然后在您的控制器中

format.html { redirect_to custom_url(@page. customURL), notice: ... }

现在,“/:customURL”将需要在routes.rb中排在最后,路由是贪婪的,第一个匹配将得到它。因此,如果你有类似“/ bob”的东西并且你有一个控制器在“/ bob”监听,控制器将在页面控制器之前得到它。