2013-11-21 30 views
0

我对rails 4有问题。我在Rails 3中使用了这段代码。现在,我在另一个应用程序中使用Rails 4,我“的第一行错误的参数数目(4 5)使用Ruby 2和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,’

+0

什么线是那么简单? –

+0

@SergioTulentsev它的第一行 – guilb

+2

请发布一个完整的堆栈跟踪(或者更好,自己看看,并检查你调用产生错误的方法并修复你的调用) –

回答

2

我不t知道关于BraintreeFormBuilder的任何信息,但我会检查ApplicationHelper::BraintreeFormBuilder是否与Rails 4兼容,并且如果您安装了正确的版本,那么您将通过:builderform_for,但建设者从\action_view\helpers\form_helper.rb调用方式从Rails的3改为滑轨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个参数,您会看到类似于您的错误。

要在这样的错误真正发生的地方缩小范围,您可能必须查看Framework Trace而不是Application Trace。如果您使用像better_errors这样的宝石,则意味着单击“所有框架”选项而不是仅在错误发生时查看“应用程序框架”。

+0

谢谢@cschroed,那是我的问题!它现在修复了! F。 – guilb

4

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

如果你像我一样,你可能已经复制了一些例子布伦特里代码到你的应用程序从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) 
相关问题