Rails5でWebアプリケーションを勉強しながら作成中なのですが、テーブルを8つ作りました。参照先のテーブルが1つで他のテーブル7つは
参照元テーブルとなりますが新規にメンバーが追加されたとき参照元の外部キーに新規メンバーの主キーの値の書き込み方法がわからなくて
困っております。
参照先のテーブル名をmembersとし、nicknameカラムを重複禁止にして一意性を持たせております。
参照元のテーブル7つ全てに外部キーカラム(member_id)を重複禁止にして一意性を持たせて作っております。
そこで参照元の外部キーにmembersテーブルのidをプログラム上で記述する方法がわからなくて困っております。
find_byメソッドでmembersテーブルのnicknameカラムを使ってレコードを検出し、検出したレコードのid(主キー)を変数(abc)に代入しておき
その変数を参照元のmodelで呼び出し参照元の外部キーカラム(member_id)にsaveメソッドで保存する方法がいいのかと考えておりますが
考え方が間違っているのでしょうか?それとも他に方法があるのでしょうか?
app/models/member.rb (membesテーブルの主キーを変数に代入)
member = Member.find_by(nickname) # membersテーブルのnicknameレコードを検索し変数memberに入れる abc = member.id # 変数memberに対してidを呼び出し変数abcに代入する
①app/models/address.rb(membersテーブルの主キーをaddressesテーブルの外部キーの値として設定)
address = Addrss.new(member_id: 0) # 新しいレコードのmember_idに0を設定レコードを追加 address.save # レコードの保存 address = Address.find_by(member_id: 0) # addressテーブルのレコード(member_id: 0)を検索し変数addressに入れる address.member_id = abc # 変数addressのmember_idカラムを呼び出し変数abcの値を代入する address.save # レコードの保存
②app/models/address.rb(membersテーブルの主キーをaddressesテーブルの外部キーの値として設定)
address = Addrss.new(member_id: (abc)) # 新しいレコードのmember_idに変数(abc)を設定レコードを追加 address.save # レコードの保存
初心者なので上記方法①、②のどちらかでいいのかどうかもわかりません。主キーを変数に保存しても他のmodelのコードでその変数を呼び出せるのか
疑心暗鬼です。
もしくは甘い考えですがテーブル間を関連付けしていれば参照先のレーコードが追加されると同時に勝手に関連付けされているテーブル全てに新規に外部キーカラムに新規の主キーの値がセットされているレコードが追加されていくのでしょうか?
わかりにくい質問だと思いますがなにとぞ宜しくお願い申し上げます。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/07/21 10:51
2017/07/21 10:56
2017/07/21 11:04