我对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"
答案 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 =确认的原因。确保这是第一条路线。 (至少在文章控制者的资源之前。