繁体   English   中英

Ruby 2和Rails 4的参数数目错误(4表示5)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM