我有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。
答案 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之前失败了。