railsで1対1の関係があるモデルを作ったときに、よく分からないエラーではまったのでメモです。
以下のようなモデルを想定します。
class User < ActiveRecord::Base has_one :bank_information accepts_nested_attributes_for :bank_information, allow_destroy: true end class BankInformation < ActiveRecord::Base belongs_to :user end
DBに保存されているuserインスタンスへ新しくbank_informationインスタンスを関連付けるには、以下のようにします
@user = User.find(params[:id]) @user.build_bank_information
ですが、あるとき次のようなエラーが出ました
ActiveRecord::StatementInvalid: Mysql2::Error: Column 'user_id' cannot be null: UPDATE `bank_informations` SET `user_id` = NULL, `updated_at` = '2017-08-22 14:15:42' WHERE `bank_informations`.`id` = 1
原因は、すでに@userにbank_informationが紐づいていたからでした。
そこで、次のようにチェックを入れるとOKです。
@user = User.find(params[:id]) @user.build_bank_information unless @user.bank_information