2013-11-21 27 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) 
相關問題