やりたいこと
やりたいこととしては以下です
- 中間テーブルを作り、テーブルA、Bが中間テーブルを介して多対多の状態になっていること(ここは理解できました)
- テーブルAに新しくデータを入れる場合、テーブルBに新しくデータを入れる場合に中間テーブルと紐付けてデータが追加される
上記をやりたいと思っております。
テーブルA=Pattern
テーブルB=Device
として、Pattern1にはDeviceが複数紐づいていて、Deviceは他のPatternにも使われるため、多対多の関係になっているとします。
分かっていること
テーブルA=Pattern
テーブルB=Device
中間テーブル=PatternAndDevice
とした時に
Railsの多対多のアソシエーションについては
pattern.rb
ruby
1has_many :device, through: :pattern_and_device 2has_many :pattern_and_device 3
device.rb
ruby
1has_many :pattern, through: :pattern_and_device 2has_many :pattern_and_device 3
pattern_and_device.rb
ruby
1belongs_to :pattern 2belongs_to :device
のようにして、migrateすれば良いという点と、中間テーブルを用いると、
|id|pattern_id|device_id|
|1|1|1|
|2|1|2|
|3|1|3|
|4|2|1|
(数値はid)
のようになるという点は理解できています。
分からないこと
patternを新規登録できる処理がpattern_controller.rbにあるのですが、そこをどのように変えたら中間テーブルにデータが入るのかがわかりません。
(deviceも同様にありますが、わかりません)
ruby
1@pattern = Pattern.new(pattern_params) 2if @account_rule.save 3 flash[:success] = '成功' 4 redirect_to patterns_path 5else 6 flash[:danger] = '失敗' 7 render :new 8end 9
このように実装すればうまくいくのでは?というアドバイスができる方、ご回答いただけますと幸いです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/25 13:21
2021/08/25 22:44