2017-10-20 34 views
1

我生成这样的Rails form_for形式如下:为什么form_for rails会产生动作:'show'?

# Controller 
def new 
    @species = Specie.new 
    render partial: 'maintainers/species/new' 
end 

# In _new.html.erb 
<%= render 'maintainers/species/form', species: @species %> 

# In maintainers/species/form 
<%= form_for(species, html: {remote: true, id: 'species_form'}) do |f| %> 
... 
<% end %> 

,但我得到这个错误:

No route matches {:action=>"show", :controller=>"species"} missing required keys: [:id]

可能是什么回事?

+0

点击提交后会发生这种情况吗? –

+0

不,这发生在部分充电时,创建窗体。 –

+0

你的代码有一个错字:'@species = Specie.new'应该是'@species = Species.new'。不知道这是否是问题。 –

回答

0

你需要做一个POST请求来调用创建操作:

# In maintainers/species/form 
<%= form_for(species, html: {remote: true, , method: :post, id: 'species_form'}) do |f| %> 
... 
<% end %> 

通知的method: :post参数。

默认情况下,form_for将发出GET请求,该请求映射为在Rails中显示动作。

+1

这应该是一个解决方案,但是form_for会根据已传递的对象自动生成'method',在这种情况下会生成方法'POST',导致对象仅被初始化,另一种情况是Object有一条记录Object.find(1)编辑操作中使用了什么,并生成了'PATCH'方法。现在,我在这两种情况下都会使用这种形式,并导致我出现问题 –

相关问题