0

Rails 4 に問題があります。Rails 3 でこのコードを使用しました。別のアプリケーションで Rails 4 と同じコードを使用していますが、「最初の行の引数の数が間違っています (5 に対して 4)」というメッセージが表示されました。 .

   <%= 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」にあるようです。

4

2 に答える 2

4

@cschroedからの回答を裏付けるためにいくつかの追加情報を提供するだけです...

あなたが私のような人なら、ブレインツリー コードの例をここからアプリにコピーしたことがあるでしょう。

@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 と互換性があるかどうか、正しいバージョンがインストールされているかどうかを確認します。:builderそれをに として渡していますがform_for、ビルダーの呼び出し方法は\action_view\helpers\form_helper.rbRails 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 に答える