0

我在使用 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 %>

编辑:似乎问题来自“builder: ApplicationHelper::BraintreeFormBuilder”

4

2 回答 2

4

只是提供一些额外的信息来证实@cschroed 的答案......

如果您像我一样,您可能已经从此处将一些示例 Braintree 代码复制到您的应用程序中。

正如@cschroed 提到的那样,Rails 4 更改了对构建器接口的调用。您需要做的就是更新示例代码的本地副本以匹配新界面。对我来说,这就像改变一样简单

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)
于 2013-12-16T17:58:03.517 回答
2

我对 BraintreeFormBuilder 一无所知,但我会检查ApplicationHelper::BraintreeFormBuilderRails 4 是否兼容,以及您是否安装了正确的版本。您将其作为:builderinto传递form_for,但是调用构建器的方式\action_view\helpers\form_helper.rb从 Rails 3 更改为 Rails 4。在 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 个参数,您会看到与您所拥有的错误类似的错误。

要缩小真正发生此类错误的位置,您可能必须查看框架跟踪而不是应用程序跟踪。如果您使用这样的 gem,better_errors则意味着单击“所有框架”选项,而不是在发生错误时仅查看“应用程序框架”。

于 2013-11-21T14:44:54.547 回答