質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

0回答

1376閲覧

【Rails4】フォームを2つ用意し、同一の中間テーブルに登録する値を切り分けたい

rendezvous_pc

総合スコア12

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

0クリップ

投稿2016/09/18 06:35

編集2016/09/18 11:12

全く同じ内容のチェックボックス郡を画面上に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"

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問