2011-10-11 11 views
0

フィールド 'customURL'を持つページモデルがあります。私は '/:customurl'にpage#showを行うことができます。しかし、私はルートでページショーをそのように定義しているので、私の作成アクションは現在、間違ったルートへのリダイレクトを成功させます。保存時にリダイレクトが正しく「/:customurl」を指すように修正するにはどうすればよいですか?Rails 3.1 - カスタムルートで正しくリダイレ​​クトする方法

コントローラ:

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

routes.rbには、魔法のヘルパーを追加できます。

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

今、あなたのコントローラで次に

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

、「/:customURL」で最後になる必要がありますあなたのroutes.rb、ルートは、貪欲にそれを取得します一致する最初のです。したがって、 "/ bob"のようなものがあり、 "/ bob"でリスニングするコントローラーがあれば、コントローラーはページコントローラーの前にそれを取得します。

+0

これは私のサーバーを現在クラッシュさせています。これはログに次のように表示されます: 'Exit .../config/routes.rb:18:'ブロック内の '(必須)':未定義のローカル変数またはメソッド 'CustomD 'for#(NameError) '私はここに必要なツイークがあるかどうか、もしかするともっとコードが必要なのかどうか教えてください...ルートヘルパーなどをどこかに追加する必要はありますか? – tuddy

+0

あなたが持っているものを使って、私はそれを一緒にまとめることができました。これは私のために働いた、おそらくそれに応じてあなたの答えを編集ですか?ルート: 'get '/:customURL ==" pages#show "、:as =>:pageshow'そしてコントローラ' format.html {redirect_to pageshow_path(@ page.customURL)、...] – tuddy

+0

申し訳ありません、それは'as::custom'です。私はそれを修正します! – Travis

関連する問題