全く同じ内容のチェックボックス郡を画面上に2つ用意し、
どちらもuser_platformsという中間テーブルにデータを挿入する処理を考えております。
1つ目のチェックボックス郡で選択された値は、
platform_type => "1"
2つ目のチェックボックス郡で選択された値は、
platform_type => "2"
といったようにuser_platformsに登録する値を変更したいです。
現在はビューにhiddenのフォームを用意することで、
platform_typeの値として"1"と"2"を送信することが出来ています。
実現したい処理としましては、
①チェックされている項目では、INSERT時にplatform_typeの値を挿入
②チェックされていない項目ではDELETE
となります。
現在は
①チェックされている項目では、INSERT時にplatform_typeの値が空
②チェックされていない項目ではplatform_typeの値が挿入され、DELETEされない
といった状況です。
こちらの解決策をご存じの方がいらっしゃいましたら、
ご教授いただけると幸いです。
■テーブル
users(id, name)
platforms(id, name)
user_platforms(id, user_id, platform_id, platform_type )
■コントローラー
Ruby
1 def edit 2 @user = current_user 3 end 4 5 params.require(:user).permit(:name, platform_ids: [], :user_platforms_attributes => [:platform_type])
■モデル
Ruby
1class User < ActiveRecord::Base 2 authenticates_with_sorcery! 3 4 has_many :user_platforms 5 has_many :platforms, :through => :user_platforms 6 accepts_nested_attributes_for :user_platforms, allow_destroy: true 7 8end 9 10class Platform < ActiveRecord::Base 11 12 has_many :user_platforms 13 has_many :users, :through => :user_platforms 14 15end 16 17class UserPlatform < ActiveRecord::Base 18 19 belongs_to :user 20 belongs_to :platform 21 22end
■ビュー
haml
1#settings-edit 2 .col-xs-6.settings-content 3 - @user.errors.each do |attr, message| 4 .alert.alert-danger= message 5 = form_for @user, url: settings_path, method: :put do |f| 6 %h2 7 設定 8 .form-body 9 .form-group 10 = f.label :name, "ユーザーID: @tanaka_tarou", class: "control-label" 11 = f.text_field :name, class: "form-control" 12 .form-group 13 = f.label :platform_ids, "メインプラットフォーム", class: "control-label" 14 %p 15 = f.collection_check_boxes :platform_ids, Platform.all, :id, :name 16 =f.fields_for :user_platforms do |upf1| 17 =upf1.hidden_field :platform_type, :value => "1" 18 .form-group 19 = f.label :platform_ids, "サブプラットフォーム", class: "control-label" 20 %p 21 = f.collection_check_boxes :platform_ids, Platform.all, :id, :name 22 =f.fields_for :user_platforms do |upf2| 23 =upf2.hidden_field :platform_type, :value => "1" 24 = f.submit "送信する", class: "btn btn-success"
あなたの回答
tips
プレビュー