在routes.rb中,我有:
get "survey/show" => "survey#show"
post "survey/step_2" => "survey#step_2"
post "survey/step_3" => "survey#step_3"
在 step_2.html.erb 中,我有:
<%= form_for @result, :url => { :controller => 'survey', :action => 'step_3' } do |f| %>
在 survey_controller.rb 中,我有:
def step_2
@result = Result.new(params[:result])
if @result.save
session[:result_id] = @result.id
render :action => "step_2"
else
render :action => "show"
end
end
def step_3
@result = Result.find(session[:result_id])
if @result.update_attributes(params[:result])
render :action => "step_3"
else
render :action => "step_2"
end
end
当我在step_2上提交表格时,出现以下错误: No route matches "/survey/step_3"
我相信 Rails form_for方法可能会发出 PUT 请求,因为@result对象有一个 id。我认为您应该将form_for行更改为:
<%= form_for @result, :url => { :controller => 'survey', :action => 'step_3' }, :html => { :method => :p ost} do |f|%>
或在 routes.rb 中将路由类型更改为 put
你必须使用匹配。
match 'survey/step_3' => 'survey#step_3', :via => 'post'
我可能对 :via 的看法是错误的,但它就是这样。