Почему моя форма не сохраняется, а работает только с API? - PullRequest
0 голосов
/ 10 ноября 2018

У меня есть форма для сохранения в моей таблице Stripe_account. Я недавно вложил ресурсы, и теперь форма не будет сохранена в моей таблице базы данных. Я все еще работаю с Stripe API и работаю там, хотя.

Чего в моем коде не хватает?

Модель пользователя:

  has_one :stripe_account

Stripe_account Модель:

  belongs_to :users

Контроллер Stripe_account:

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

      end

    def create

        @stripe_account = StripeAccount.new(stripe_account_params)
        @user = User.find(params[:user_id])
          acct = Stripe::Account.create({
.....
.....
    @stripe_account.id = current_user.id
    @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 new_bank_account_path, 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

Вид:

  <%= form_for ([@user, @stripe_account]) do | f | %>

Маршруты:

resources :users do
    resources :stripe_accounts
  end

#added for testing 
  get 'stripe_' => "stripe_account#create"
  get 'stripe_new' => "stripe_account#new"

Вот мои маршруты, может быть, могут помочь ?: https://pastebin.com/RVWd2Qq9

Теперь, хотя у меня еще нет правильно настроенного контроллера или моделей "bankaccount", не должен ли он хотя бы попытаться пойти туда и сохранить stripe_account? Просто убедитесь, что это не проблема. Но похоже, что он не работает, потому что новая форма перезагружается.

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

Что в моем программировании не так?

Обновление для добавления ответа cmd:

Started POST "/users/2/stripe_accounts" for 127.0.0.1 at 2018-11-10 00:11:26 -0500
Processing by StripeAccountsController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"nz1234567890iJuFwsm/Z4ylhE6zoGdWN6QCfWtDZTH1sxZu/WCdWMKBGkc4zoZ2dOgk9c8UDwRzgqdxrT/sA==", "stripe_account"=>{"account_type"=>"individual", "business_name"=>"", "business_tax_id"=>"", "first_name"=>"Dill", "last_name"=>"Pickles", "ssn_last_4"=>"1234", "dob_month"=>"3", "dob_day"=>"4", "dob_year"=>"1917", "address_line1"=>"198 berry avenue", "address_city"=>"san fran", "address_state"=>"CA", "address_postal"=>"90213", "tos"=>"1", "id"=>"2"}, "full_account"=>"{:value=>\"true\"}", "button"=>"", "user_id"=>"2"}
  User Load (0.2ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT ?  [["id", 2], ["LIMIT", 1]]
  ↳ /home/bob/.rvm/gems/ruby-2.5.1/gems/activerecord-5.2.1/lib/active_record/log_subscriber.rb:98
  User Load (0.2ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ? LIMIT ?  [["id", 2], ["LIMIT", 1]]
  ↳ app/controllers/stripe_accounts_controller.rb:49
   (0.1ms)  begin transaction
  ↳ app/controllers/stripe_accounts_controller.rb:91
   (0.1ms)  rollback transaction
  ↳ app/controllers/stripe_accounts_controller.rb:91
  Rendering stripe_accounts/new.html.erb within layouts/application
  Rendered stripe_accounts/_account_form.html.erb (9.4ms)
  Rendered stripe_accounts/new.html.erb within layouts/application (12.5ms)
  Rendered layouts/_navbar.html.erb (1.9ms)
  Rendered layouts/_footer.html.erb (0.4ms)
Completed 200 OK in 3202ms (Views: 190.0ms | ActiveRecord: 2.4ms)

1 Ответ

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

Проверка не удалась: пользователь должен существовать

Вы можете использовать optional :true для устранения ошибки

#stipe_account.rb
belongs_to :user, optional: true
            #^ should be singular

OR

Назначьте user_id в действии create следующим образом

@stripe_account.user_id = current_user.id #add this line

Обновление:

неопределенный метод `user_id = 'для StripeAccount: 0x001234f4c58692ae8 Сделал ты имеешь в виду? Пользователь = "

Ошибка в том, что в таблице stripe_accounts нет столбца user_id. Создайте миграцию, которая сделает всю работу за вас

rails g migration add_user_id_to_stripe_accounts user_id:integer

и сделать rails db:migrate

...