Сохранение параметра в моем UsersController (разработка) из формы в StripeAccountsController? - PullRequest
0 голосов
/ 09 ноября 2018

Я задаюсь вопросом о лучшем маршруте, чтобы выполнить то, что я хочу сделать ..

Во-первых, моя проблема в том, что я хочу сохранить ввод формы с одного контроллера в другую таблицу контроллеров. но способ, которым я имею это, не работает. как мне это сделать?

В данный момент я пытаюсь просто сохранить токен учетной записи Stripe из таблицы stripeaccount в таблицу пользователей в stripe_account.

stripe_account.acct_id >> user.stripe_account

Вот контроллер полосы:

def create

    @stripe_account = StripeAccount.new(stripe_account_params)



          acct = Stripe::Account.create({
          :country => "US",
          :type => "custom",
            legal_entity: {
              first_name: stripe_account_params[:first_name].capitalize,
              last_name: stripe_account_params[:last_name].capitalize,
              type: stripe_account_params[:account_type],
              dob: {
                day: stripe_account_params[:dob_day],
                month: stripe_account_params[:dob_month],
                year: stripe_account_params[:dob_year]
              },
              address: {
                line1: stripe_account_params[:address_line1],
                city: stripe_account_params[:address_city],
                state: stripe_account_params[:address_state],
                postal_code: stripe_account_params[:address_postal]
              },
              ssn_last_4: stripe_account_params[:ssn_last_4]
            },
            tos_acceptance: {
              date: Time.now.to_i,
              ip: request.remote_ip
            }

    })

    @stripe_account.acct_id = acct.id




    respond_to do |format|

      # @user = User.find(params[:id])

      if @stripe_account.save
        current_user = @user
        @user.stripe_account = acct.id
        format.html { redirect_to @stripe_account, notice: 'Stripe account was successfully created.' }
        format.json { render :show, status: :created, location: @stripe_account }
      else
        format.html { render :new }
        format.json { render json: @stripe_account.errors, status: :unprocessable_entity }
      end
    end
  end

Это само по себе не сработало, но я решил, что я бы пропустил скрытое поле в форме @stripe_account, чтобы добавить идентификатор учетной записи в полосу в users.stripe_account, но это тоже не сработало ... как вы можете видеть в закомментированном фрагменте кода, я также попытался найти по идентификатору пользователя, но это выдает ошибку «невозможно найти без идентификатора пользователя».

вид:

     <%= form_for @stripe_account do | f | %>
...
<div class="col-md-4">
<div class="form-group">
    <%= f.label :address_postal, "Zip" %>
    <%= f.text_field :address_postal, class: "form-control input-lg", placeholder: "90210" %>
 </div>
 </div>
...
  <div class="field">
   <%= f.hidden_field :id, :value => current_user.id %>
  </div>
...
  <%= f.button "Create Account", class: "btn btn-primary btn-lg btn-block btn-custom", data: {disable_with: "<i class='fa fa-spinner fa-spin'></i> Creating account..."} %>

Ошибка, которую я получаю с текущим кодом:

undefined method `stripe_account=' for nil:NilClass

Кроме решения этой проблемы, это правильный путь решения проблемы и наиболее эффективный. Единственный другой путь, который я могу придумать, - это создать объединенную таблицу, но не уверен, что это «лучший» или более эффективный способ, и я надеюсь, что более опытные программисты могут сообщить мне, какой вариант лучше всего подходит для этого варианта использования.

У меня есть регистрация пользователей, будь то покупатель или продавец, а затем продавцы могут добавить свою банковскую информацию - так что создание пользователя и stripeaccount не сделано вместе, и я не хочу, чтобы это тоже было (на случай, если вам интересно почему я просто так не делаю)

Мне бы очень хотелось услышать, что вы, ребята, думаете по этому поводу. спасибо за ваше время.

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

1 Ответ

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

спасибо https://stackoverflow.com/users/1430810/arieljuod на вопрос дан ответ

Это его ответ на переформатированный вопрос:

Я предполагаю, что вы делаете только @ stripe_account.save ине делает @ user.save (почему вы обрезали свой метод?).

Вы можете добавить @ user.save или установить ассоциацию own_to с параметром autosave: true.

I 'Я рекомендую вам изменить это:

@stripe_account = StripeAccount.new(stripe_account_params)
@user = User.find(params[:user_id])
@stripe_account.user_id = current_user.id

на это, хотя:

@user = User.find(params[:user_id])
@stripe_account = @user.build_stripe_account(stripe_account_params)

Хотя, когда я ранее создавал этот вопрос, я был не настолькоэто было, когда я переформатировал этот похожий вопрос позже.

Так что в ответ на этот вопрос они ответили бы так:

Я бы порекомендовал вам:измените это:

@stripe_account = StripeAccount.new(stripe_account_params)

на это, хотя:

@user = User.find(params[:user_id])
@stripe_account = @user.build_stripe_account(stripe_account_params)

И затем сохраните как:

  if @stripe_account.save! && @user.save
...