versionなど
- ruby 2.6.4
- rails 5.2.3
- sqlite3 3.29.0
やりたいこと
お金の受け渡し記録のようなものを作りたい。
Membersテーブルにidとユーザ名。
MoneyRecordsテーブルにidと差出人、受取人、金額が記録されている。
参考にしたのは以下の記事:
[Rails] 同じmodelを参照する外部キーを一つのmodelでもつ方法
スキーマ
schema.rb
1# 一部抜粋 2 create_table 'members', force: :cascade do |t| 3 t.string 'member_name' 4 t.string 'email' 5 t.string 'password_digest' 6 t.string 'remember_token' 7 t.datetime 'created_at', null: false 8 t.datetime 'updated_at', null: false 9 end 10 11 create_table 'money_records', force: :cascade do |t| 12 t.float 'price' 13 t.integer 'receiver_id' 14 t.integer 'sender_id' 15 t.datetime 'created_at', null: false 16 t.datetime 'updated_at', null: false 17 t.index ['receiver_id'], name: 'index_money_records_on_receiver_id' 18 t.index ['sender_id'], name: 'index_money_records_on_sender_id' 19 end
モデル
money_record.rb
1class MoneyRecord < ApplicationRecord 2 belongs_to :receiver , class_name: 'Member', foreign_key: 'receiver_id' 3 belongs_to :sender , class_name: 'Member', foreign_key: 'sender_id' 4end
member.rb
1class Member < ApplicationRecord 2 has_many :receiver_records , class_name: 'MoneyRecord', foreign_key: 'receiver_records_id' 3 has_many :sender_records , class_name: 'MoneyRecord', foreign_key: 'sender_records_id' 4end
できたこと/できなかったこと
rails consoleで
bash
1member_1 = Member.new(member_name: "hoge") 2member_1.save 3member_2 = Member.new(member_name: "fuga") 4member_2.save 5 6mr = MoneyRecord.new 7mr.sender = member_1 8mr.receiver = member_2
でsender, receiverにMemberを割り当てることはできましたが、
mr.save!
を実行すると
bash
1ActiveRecord::StatementInvalid: SQLite3::SQLException: no such table: main.sender
というエラーが出てdbに登録できません。
おそらくモデル内のアソシエーションの記述がまずいのだと思いますが、
どのようにすればこの問題が解消するでしょうか?
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。