Сохранение HTML-формы в таблице? - PullRequest
0 голосов
/ 17 ноября 2018

Проблема: Я хочу проверить, подключил ли пользователь свой банковский счет.То, что у меня есть, не сохраняется в таблице, поэтому у меня нет возможности проверить это из БД.

Я хочу: я хочу только сохранить stripe_account_id в таблице bankaccount (которая является столбцом) каким-то образомчерез формы представить.Пусть он будет уникальным и может быть переопределен

Это то, что я сделал до сих пор:

Контроллер банковского счета:

 def new
     unless current_user.stripe_token
     redirect_to new_user_stripe_account_path and return
  end

  begin

    @stripe_account = Stripe::Account.retrieve(current_user.stripe_token)

        @bank_account = BankAccount.new
        @stripe_account = StripeAccount.find(params[:stripe_account_id])

     rescue Stripe::StripeError => e
        handle_error(e.message, 'new')

     rescue => e
        flash[:error] = e.message
      end
     end

  def create

    unless params[:token] && current_user.stripe_token
       redirect_to new_bank_account_path and return
    end

    begin

      token = params[:token]
      stripe_account = Stripe::Account.retrieve(current_user.stripe_token)

         stripe_account.external_account = params[:token]
         stripe_account.save

         flash[:success] = "Your bank account has been added!"
         redirect_to dashboard_path


       @bank_account = BankAccount.new(bank_account_params)
       @bank_account.save!

       rescue Stripe::StripeError => e
       flash[:error] = e.message

        rescue => e
        flash[:error] = e.message
        end
       end

   private

          def set_bank_account
            @bank_account = BankAccount.find(params[:id])
          end

          def bank_account_params
            params.require(:bank_account).permit()
          end

        end

Маршруты:

  resources :users do
    resources :stripe_accounts
  end

  resources :stripe_accounts do
    resources :bank_accounts
  end

  resources :bank_accounts

Не имея ресурсов самостоятельно, я получаю сообщение об ошибке: "no post / bank_accounts" --- прежде чем я понял, что у меня нет возможности проверитьпользователь, имеющий подключенный банковский счет, не был вложенным

Вот суть формы:

  <form action="/bank_accounts" method="POST" id="payment-form-1">
      <input type="hidden" name="token" />
          <label for="country">Country</label>
              <select id="country" class="form-control">
                  <option value="US">United States</option>
                  <option value="ES">Spain</option>
              </select>
          <label for="currency">Currency</label>
              <select id="currency" class="form-control">
                  <option value="EUR">Euro</option>
              </select>
          <label for="routing-number">Routing Number</label>
              <input type="text" class="form-control" id="routing-number" value="110000000" />
          <label for="account-number">Account Number</label>
              <input type="text" class="form-control" id="account-number" value="000123456789" />
          <label for="account-holder-name">Account Holder Name</label>
              <input type="text" class="form-control" id="account-holder-name" />
          <label for="account-holder-type">Account Holder Type</label>
              <select id="account-holder-type" class="form-control">
                  <option value="individual">Individual</option>
                  <option value="company">Company</option>
              </select>
         <%= hidden_field_tag :authenticity_token, form_authenticity_token -%>
         <%= hidden_field_tag :stripeToken, current_user.stripe_token -%>
         <%= hidden_field_tag :stripe_account_id, :value => @stripe_account_id %>
            <button type="submit">Submit</button>
             <div class="outcome">
              <div class="error"></div>
                <div class="success">
               Success! Your Stripe token is <span class="token"></span>
                </div>
              </div>
           </form>

Форма затем отправляетсяиспользуя javascript:

<script>

  var stripe = Stripe('pk_test_W1234567qTSqQJucPWU8kh');

  function setOutcome(result) {
  var successElement = document.querySelector('.success');
  var errorElement = document.querySelector('.error');
  successElement.classList.remove('visible');
  errorElement.classList.remove('visible');

  if (result.token) {
    // In this example, we're simply displaying the token
    successElement.querySelector('.token').textContent = result.token.id;
    successElement.classList.add('visible');

    // In a real integration, you'd submit the form with the token to your backend server
    var form = document.querySelector('form');
    form.querySelector('input[name="token"]').setAttribute('value', result.token.id);
    form.submit();

  } else {
    errorElement.textContent = result.error.message;
    errorElement.classList.add('visible');
  }
}

document.querySelector('form').addEventListener('submit', function(e) {
  e.preventDefault();

  var bankAccountParams = {
    country: document.getElementById('country').value,
    currency: document.getElementById('currency').value,
    account_number: document.getElementById('account-number').value,
    account_holder_name: document.getElementById('account-holder-name').value,
    account_holder_type: document.getElementById('account-holder-type').value,
  }
  if (document.getElementById('routing-number').value != '') {
    bankAccountParams['routing_number'] = document.getElementById('routing-number').value;
  }

  stripe.createToken('bank_account', bankAccountParams).then(setOutcome);
});


</script>

В конечном итоге , я просто хочу сохранить ссылку на таблицу банковских счетов, чтобы я знал, заполнил ли конечный пользователь данные своего банковского счета ещеи в целях просмотра, чтобы напомнить им, что они уже есть.

Я хотел бы сохранить в таблице банковских счетов stripe_account.id (это связано с пользователем в таблице stripeaccount), таким образом, я плохо знаю, какие пользователи имеютуже заполнил это.(таблица bankaccount имеет столбец stripe_account_id, id, create_at и updated_at).

Есть ли способ сделать это из HTML-формы, из JavaScript и т. д.?Мой контроллер просто не так?

1 Ответ

0 голосов
/ 17 ноября 2018

Чтобы сохранить идентификаторы внешних учетных записей в базе данных, вам нужно будет сделать customer.sources.all(object: "bank_account"), затем получить идентификатор каждого и сохранить его в связанном StripeAccount (я полагаю), связанном с пользователем (при этом убедитесь, что вы дублируете идентификаторы).

https://stripe.com/docs/api/customer_bank_accounts/list

Лично я думаю, что вам не нужно хранить идентификаторы банковских счетов в вашей базе данных, вы можете просто извлечь их из Stripe, когда вам это нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...