为什么会收到此错误:ActiveRecord :: AssociationTypeMismatch?

时间:2018-11-10 10:00:00

标签: ruby-on-rails ruby

问题:当我尝试将表单数据从一个控制器保存到另一个控制器时,我收到错误消息(在下面列出)。

  

StripeAccount(#473341532384680)已预期,得到了“ acct_7424613FLPIHiXZ”   这是String(#47334237953540)的实例

问题:我的代码在创建什么错误?

我有可以正常使用的表单输入,但是我想从中获取一些数据并将其附加到其他控制器上。

该表格适用于用户和stripe_account控制器。我想从stripe_account中获取acct.id,并将其保存在stripe_account下的@user表中。

用户模型:

  has_one :stripe_account

Stripe_account模型:

  belongs_to :users

Controller 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])
        @stripe_account.user_id = current_user.id
          acct = Stripe::Account.create({
.....
.....
    @stripe_account.acct_id = acct.id
#below is what isn't working
    @user.stripe_account = acct.id

  respond_to do |format|
      if @stripe_account.save!
        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

但收到错误:预期为StripeAccount(#473341532384680),得到了“ acct_7424613FLPIHiXZ”,它是String(#47334237953540)的实例

...在“用户”模式中,我将“ stripe_account”设置为字符串。

我尝试过

acct_id = current_user.stripe_account

及其它的其他迭代。我假设问题出在我的模型中,所以我尝试了:   accepts_nested_attributes_for:stripe_account 但是出现了同样的错误。

1 个答案:

答案 0 :(得分:0)

万一有人碰到这个。我在将数据从表单记录到2个控制器表时遇到问题。

这就是我所做的修复工作(感谢stackO用户)@arieljuod

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

//and then saving from this://
    if @stripe_account.save!
//to this://
    if @stripe_account.save! && @user.save