Проблема: Я хочу проверить, подключил ли пользователь свой банковский счет.То, что у меня есть, не сохраняется в таблице, поэтому у меня нет возможности проверить это из БД.
Я хочу: я хочу только сохранить 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 и т. д.?Мой контроллер просто не так?