Rails 4中form_for的参数数量错误

8

我正在使用 form_for 标签,并且在 Rails 3.0.4 环境中可以正常工作。但是当我尝试将项目更新到 Rails 4 时,它会出现以下错误:

"wrong number of arguments (3 for 2)"。这是我的代码:

   <%= form_for @email, :url => alerts_path do |f| %>
   <% end %>

只需尝试使用 <%= form_for @email do |f| %> <% end %> - Soni Kishan
1
我也尝试过这个,我得到了与我上面提到的相同的错误。 - Zeeshan Mahmood
请展示控制器代码。 - Soni Kishan
我有一个联系人模型(@contact model),并创建了虚拟字段init,因为我不想存储数据。但在那个时候,我遇到了这种错误。对我来说,解决方案是创建字段而不是使用虚拟属性。 - chaitanya
尝试在config/initializers/simple_form.rb中使用方法。我更改了config.label_text中的lambda,将其改为3个参数而不是2个,这样问题就解决了。 - Federico Rodríguez
5个回答

23

尝试删除可能在视图中更改事物的东西。

在我的情况下,问题出在客户端验证宝石上。

希望能对你有所帮助。


这个问题已经在git上记录和修复: https://github.com/DavyJonesLocker/client_side_validations/issues/603 我刚刚改变了我的Gemfile指向github,它解决了这个问题。 - Tigraine

9
我还不确定原因,但是从我的Gemfile中删除"meta_search" gem对我在Rails 4上遇到的这个问题有所帮助。
如果您谷歌搜索此问题,您可能会发现这个GitHub问题将其归因于"client_side_validations" gem,但是使用该repo的建议的"rails-4-quick-fixes"分支并不能解决我的问题。
我认为simple_form_for的错误是一个误导,因为即使我使用Rails内置的form_for,也会遇到相同的错误,而且无论我实际传入任何方法的参数数量如何,都会得到wrong number of arguments (3 for 2)
自2012年2月2日以来,meta_search没有发布新版本,因此我只能假设gem中的某些内容与Rails 4不兼容。如果我具体发现了问题所在,我会更新这个答案。停止使用meta_search似乎有点不好,但这是我目前所能提供的。谢谢!

谢谢,伙计。这解决了我的问题。 - Jackie Chan
1
哎呀,出问题了 :-/ 我们使用ActiveAdmin,而meta_search是一个依赖项。所以如果我们想保留AA,就不能升级到Rails 4? - sixty4bit

0

0

谢谢你的帮助,但我已经尝试过这个解决方案了,它仍然给我相同的错误参数数量。 - Zeeshan Mahmood
@ZeeshanMahmood:尝试在url后面添加method: :post并检查。 - kiddorails
你的 alerts 是资源吗?在 routes.rb 中? - kiddorails

0

我看不出你的form_for有什么问题,你能否回复异常的回溯信息?可能是另一个gem覆盖了默认的form_for?


1
正如流行的答案所说,client_side_validations gem也可能会导致这种情况。 - Nuriel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接