Rails路由的匹配不正确

时间:2015-04-07 08:06:37

标签: ruby-on-rails

我有form_for生成这个html格式:

<form id="new_programm" action="/programms" accept-charset="UTF-8" method="post">
  .. some code etc.
</form>

很明显,此表单是通过post提交的,其匹配的路由是

 POST  /programms(.:format)  programms#create

但是当我提交表单时,它会查找index操作。所以它匹配get请求。我使用resources :programms定义了路线。怎么会发生这种情况。为什么我的表格符合不同的路线

我的form_for:

<%= form_for po do |f| %>
<% end %>

其中po是我渲染_form partial时传递的局部变量。 顺便说一句,我在客户/展示视图中渲染我的表单。所以我的&#34; po&#34;在客户中创建的变量#show method。

def show
  .. some code ..
  @po = Programm.new
end

在客户端/显示它使用:

呈现
<%= render 'programms/form', po: @po %>

最有趣的是,如果我在firebug中检查代码,很明显这个表单应该通过post提交。但它使用了get。

2 个答案:

答案 0 :(得分:0)

我认为您正在将nil对象传递给form_for辅助方法,请尝试以下方法:

<%= render partial: 'programms/form', locals: {po: @po} %>

出于调试目的,您可以尝试:

<%= form_for(programm.new) do |f| %>
<% end %>

答案 1 :(得分:0)

谢谢大家的帮助。这是我的大错。当我看到我的路线不匹配的错误时,我认为它与我的表格不匹配,因为我看到/ programms url。   但实际上我已经调用了我的programm #create方法并导航到/ programms url,之后我的create方法试图重定向到其他url,它实际上失败了。因为我仍然在浏览器中看到旧的URL,我认为它在调用programm #create之前失败了。