【问题标题】:wrong number of arguments (4 for 5) with Ruby 2 and Rails 4Ruby 2 和 Rails 4 的参数数量错误(4 比 5)
【发布时间】:2013-11-21 14:11:09
【问题描述】:

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”,

【问题讨论】:

  • @SergioTulentsev 在第一行
  • 请发布完整的堆栈跟踪(或者更好的是,自己查看并检查您调用产生错误的方法的位置并修复您的调用)
  • Ruby 1.8 语法在 Ruby 2.0 中仍然有效吗?尝试使用url: 而不是:url =&gt;
  • @John 是的,当然 hashrocket 语法仍然有效。这似乎不是问题。
  • @john,我尝试使用 url:、params: 等...它不能解决问题

标签: ruby-on-rails ruby ruby-on-rails-4 braintree


【解决方案1】:

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

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

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)

【讨论】:

    【解决方案2】:

    我对 BraintreeFormBuilder 一无所知,但我会检查ApplicationHelper::BraintreeFormBuilder 是否与 Rails 4 兼容,以及您是否安装了正确的版本。您将其作为:builder 传递给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 个参数,您会看到与您的错误类似的错误。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-16
      • 1970-01-01
      • 2015-10-24
      • 1970-01-01
      • 2013-06-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多