[英]wrong number of arguments (4 for 5) with Ruby 2 and Rails 4
我在Rails 4上遇到问题。我在Rails 3上使用了此代码。现在,我在另一个应用程序中将它与Rails 4一起使用,并且在第一行收到消息“参数数量错误(4为5)” 。
<%= form_for :customer,
:url => Braintree::TransparentRedirect.url,
:params => @result && @result.params[:customer],
:builder => ApplicationHelper::BraintreeFormBuilder,
:errors => @result && @result.errors.for(:customer) do |f| %>
<%= field_set_tag "Customer" do %>
<dl>
<dt><%= f.label :first_name, 'First Name' %></dt>
<dd><%= f.text_field :first_name %></dd>
<dt><%= f.label :last_name, 'Last Name' %></dt>
<dd><%= f.text_field :last_name %></dd>
<dt><%= f.label :phone, 'Phone' %></dt>
<dd><%= f.text_field :phone %></dd>
</dl>
<% end %>
<%= field_set_tag "Credit Card" do %>
<% f.fields_for :credit_card do |cc| %>
<dl>
<dt><%= cc.label :number, 'Number' %></dt>
<dd><%= cc.text_field :number %></dd>
<dt><%= cc.label :expiration_date, 'Exipration Date (MM/YY)' %></dt>
<dd><%= cc.text_field :expiration_date %></dd>
<dt><%= cc.label :cvv, 'CVV' %></dt>
<dd><%= cc.text_field :cvv %></dd>
</dl>
<% end %>
<% end %>
<%= hidden_field_tag :tr_data, @tr_data %>
<%= f.submit 'Save Payment Info' %>
<% end %>
编辑:似乎问题来自“生成器:ApplicationHelper :: BraintreeFormBuilder,”
只是提供一些其他信息以证实@cschroed的答案...
如果您像我一样,则可能已将一些示例Braintree代码从此处复制到了您的应用中。
Rails 4如@cschroed所述将对构建器接口的调用更改为。 您需要做的就是更新示例代码的本地副本以匹配新界面。 对我来说,这就像改变
class BraintreeFormBuilder < ActionView::Helpers::FormBuilder
...
def initialize(object_name, object, template, options, proc)
至
class BraintreeFormBuilder < ActionView::Helpers::FormBuilder
...
def initialize(object_name, object, template, options)
我对BraintreeFormBuilder一无所知,但我将检查ApplicationHelper::BraintreeFormBuilder
是否与Rails 4兼容,以及是否安装了正确的版本。 您将其作为:builder
传递给form_for
,但是从\\action_view\\helpers\\form_helper.rb
调用生成器的方式从Rails 3更改为\\action_view\\helpers\\form_helper.rb
在Rails 3中是:
builder.new(object_name, object, self, options, block)
在Rails 4中是:
builder.new(object_name, object, self, options)
因此,如果您的ApplicationHelper::BraintreeFormBuilder
版本仍然需要5个参数,但是Rails 4现在传递了4个参数,您将看到类似您所遇到的错误。
为了缩小真正发生此类错误的位置,您可能必须查看Framework Trace,而不是Application Trace。 如果您使用的是诸如better_errors
类的宝石, better_errors
意味着单击“所有框架”选项,而不是在发生错误时仅查看“应用框架”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.