2010-12-06 46 views
0

我對Ruby on Rails REST路由非常困惑。即使我已經指定,在成功之後,它應該轉到確認動作,它將轉到show動作並通過ID =確認。對Ruby on Rails REST路由感到困惑

def create 

    @article = Article.new(params[:article]) 

    respond_to do |format| 
    if @article.save 
     format.html { redirect_to :action => "confirm" } 
    else 
     format.html { render :action => "new" } 
    end 

    end 

    end 

我得到的錯誤是:

的ActiveRecord :: RecordNotFound在ArticlesController#顯示

找不到文章與ID =確認 Rails.root:/項目/ highoncoding

應用程序跟蹤|框架跟蹤|全面跟蹤 應用程序/控制器/ articles_controller.rb:31:在'秀」

更新1:

這裏是我的Route.rb文件:

resources :articles 

    get "articles/confirm" 

回答

1

你需要添加路由,所以它看起來像

match 'articles/confirm/', :controller => 'article', :action => 'confirm' 
resources :articles 

你需要有:ID在那裏,否則會認爲是確認一個id這就是爲什麼你看到的錯誤ID =確認。確保這是第一條路線。 (至少前

+0

即使在定義了路由之後,我會得到以下路由錯誤 沒有路由匹配{:action =>「confirm」,:controller =>「articles」} – azamsharp 2010-12-06 21:52:27

1

你也許應該補充確認路線直接在你的路線文件中。

match 'articles/confirm' => 'articles#confirm' 

resources只適用於create/update/destroy/etc。

+0

的文章控制器的資源,我有以下:資源:文章 GET「的文章/確認」 – azamsharp 2010-12-06 21:47:53

+0

這僅適用於REST風格的動作要添加新的功能(確認。 ),並且必須明確地定義它 – 2010-12-06 21:49:53

2
# config/routes.rb 
MyApp::Application.routes.draw do 

    resources :articles do 
    member do 
     get 'confirm' 
    end 
    end 

end 

# app/controllers/articles_controller.rb 
class ArticlesController < ApplicationController 

    def create 
    @article = Article.new(params[:article]) 

    respond_to do |format| 
     if @article.save 
     # use a named route here 
     format.html { redirect_to confirm_article_url(@article) } 
     else 
     format.html { render :action => "new" } 
     end 
    end 
    end 

end