0

RecurlyonRailsとやり取りするためのフォームを作成していました。

私はこのビューとこのフォームを持っています:

<h1><%= t('payments.edit') %> </h1>


<%= render(:partial => 'shared/new_recurly_form', :locals => {:success_url => "#{APP_URL}#{users_credit_card_path}"}) %>

<%= semantic_form_for current_user, :url => users_credit_card_path, :html => {:method => :put, :class => 'credit_card'} do |form| %>

    <%= form.inputs do %>
      <div class="field">
        <%= form.label :name %>
        <%= form.text_field :name %>
      </div>  
      <div class="field">
        <%= form.label :first_surname %>
        <%= form.text_field :surnames %>
      </div>  
      <div class="field">
          <%= label_tag :number, "Credit Card Number " %>
          <%= text_field_tag :number %>
      </div>
      <div class="field">
          <%= label_tag :verification_value, "Security Code on Card (CVV)" %>
          <%= text_field_tag :verification_value %>
      </div>
      <div class="field">
      <%= label_tag :month, "Expiration month" %>
      <%= select_month(Date.today, :use_month_numbers => true) %>
      </div>
      <div class="field">
      <%= label_tag :year, "Expiration year" %>
      <%= select_year(Date.today, :start_year => Time.now.year, :end_year => Time.now.year + 20) %>
      </div>
    <% end %>

  <%= form.buttons do %>
    <%= form.commit_button  t('confirm') %>
  <% end %>

<% end %>

およびそれぞれのコントローラー、credit_card_controller.rb

class Users::CreditCardsController < ApplicationController

  skip_before_filter :check_deactivated_user
  protect_from_forgery :except => :create

  def create
    update
  end

  def edit
    @user = current_user
    @price_plan = current_user.price_plans.active.first
  end

  def update
    begin
        update_new_recurly_subscription
    rescue Exceptions::RecurlyAccountCreateInvalidAccountException => e
        puts "CreditCardsController Exceptions::RecurlyAccountCreateInvalidAccountException"
        puts e.message
    rescue Recurly::Resource::NotFound => e
        puts "CreditCardsController Recurly::Resource::NotFound Creating new account for user"  
        puts e.message  
        begin
            create_new_recurly_account
            create_new_recurly_subscription         
        rescue Exceptions::RecurlyAccountCreateInvalidAccountException => e
            puts "CreditCardsController inside find Recurly::Resource::NotFound"
            puts e.message
            update_new_recurly_account
            create_new_recurly_subscription
        end 
    end

    account = update_account_billing_info
    account.billing_info = {
        :first_name         => current_user.name,
        :last_name          => "#{current_user.surnames}",
        :number             => params[:number],
        :verification_value => params[:verification_value],
        :month              => params[:month],
        :year               => params[:year]
    }
    puts "Users::CreditCardsController update Billing info: #{account.billing_info.inspect}"
    account.billing_info.save
    if current_user.credit_card_store!(account.billing_info)
      if current_user.is_debtor?
        flash[:alert] = t('flash.price_plans.payed_after_unpay')
        render :edit
      else
        flash[:alert] = t('flash.credit_card.update.success')
        render :success
      end

    else
      flash[:failure] = t('flash.credit_card.update.failure')
      render :edit
    end

  end

end

以前のコントローラーの更新機能を使用してフォームを更新すると、クレジットカード番号を変更できますが、有効期限と有効期限を変更できません。

ここで何が欠けていますか?Recurlyとやり取りする月と年ではなく、クレジットカード番号を変更できるのはなぜですか?

4

1 に答える 1

0

誤ったパラメーター(nil値)をプルしています。ログに基づいて、次のことを試してください。

account.billing_info = {
    ...
    :month              => params[:date][:month],
    :year               => params[:date][:year]
}

これに対応します"date"=>{"month"=>"7", "year"=>"2017"}

于 2012-11-05T13:47:51.050 に答える