对Ruby on Rails REST路由感到困惑

时间:2010-12-06 21:42:45

标签: ruby-on-rails

我对Ruby on Rails REST路由感到困惑。即使我已经指定在成功之后它应该进行确认操作,它将转到show动作并传递ID = confirm。

 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

我得到的错误如下:

在ArticlesController#show中显示ActiveRecord :: RecordNotFound

无法找到ID =确认的文章 Rails.root:/ Projects / highoncoding

应用程序跟踪|框架跟踪|完整追踪 app / controllers / articles_controller.rb:31:在'show'

更新1:

这是我的Route.rb文件:

 resources :articles

  get "articles/confirm"

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

您应该直接在路线文件中添加确认路线。

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

resources仅适用于create / update / destroy / etc。

答案 2 :(得分:1)

您需要添加路线,使其看起来像

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

你需要在那里有:id或它会认为确认是一个id,这就是你看到错误ID =确认的原因。确保这是第一条路线。 (至少在文章控制者的资源之前。