ruby on rails で開発を行っているのですが、以下の質問をさせてください。
- userモデル
- customerモデル
という2つのモデルがあります。
customerは
ruby
1has_many :user, dependent: :destroy
となり、対してuserは
ruby
1belongs_to :customer
とっています。
customer A
customer B
user C
というレコードを例にします。
customer A
を作成時にuser C
を紐付けたcustomer A
を削除したい- でも
user C
は削除したくない (紐づくcustomer
をB
にしたい)
上記が今回解決したい事項です。
★補足事項
user
テーブルにはcustomer_id
という外部キーがあるuser C
が持つcustomer_id
をA
→B
に変更してみたが、customer A
を削除すると相変わらずuser C
は削除されてしまう。
よろしくおねがいいたします。
> user Cが持つcustomer_idを A → B に変更してみたが、customer Aを削除すると相変わらずuser Cは削除されてしまう。
user Cの変更後に保存した上で、customer Aを再読み込みなどしてみてはどうでしょうか?
(正しくデータが取れれば、user Cの変更を保存した後にcustomer Aとの関係は残らないはずです)
すみません、自分が誤っている部分がありまして、
> user Cが持つcustomer_idを A → B に変更
する際にuser Cを持っているcustomerがA, Bの2者になるようです。
そのためcustomer Aを削除する際に、user Cも削除されてしまうと予測してます。
そこで、customer Aが持つuser Cを削除されても良いuser Dに変更しようとしたところ、
Mysql2::Error: Cannot delete or update a parent row: a foreign key constraint fails
というエラーになりました。
どうやらuser Dに変更しようとする際、なぜかuser Cを削除する処理が動き、
「user CはcustomerB に紐付いているから削除できないよ!」
というエラー内容と見られます。。。
これが解決出来ない状態です...
どのようにコードで書いたのですか?
(すでに書いたように、customer Aが古いデータを持ってしまっていて、本来無関係になったはずのuser Cに影響している、ということが考えられます)
> user Cを持っているcustomerがA, Bの2者になるようです。
user belongs_to customerである以上、「正しくデータを取れている状況なら」起きません。
> user Cを持っているcustomerがA, Bの2者になるようです。
reloadコマンドをおこなったうえで確認したところ、user Cを持っているcustomerを確認したらcustomer Bのみになっておりました!
その後削除を行ったところ、理想の挙動となりました。
助かりました!
ありがとうございます。