中間テーブルgroup_tagsにidを登録したい。
環境
ruby 2.5.1
rails 6.0.3.2
アソシエーション
ruby
1:groupモデル 2 3 has_many:group_tags 4 has_many:tags,through: :group_tags
ruby
1:group_tag中間モデル 2 3 belongs_to :group 4 belongs_to :tag
ruby
1:tagモデル 2 3 has_many:group_tags 4 has_many:groups,through: :group_tags
やりたいこと
tagをcreateしたときに中間テーブルgroup_tagsにidを自動登録したい
tagをcreateする際にstrong params を仲介して中間テーブルgroup_tagsにもtag_idを書き込みます。
下記はうまくいきました。
ruby
1:tags_controller.rb 2 3 def create 4 Tag.create(tag_params) 5 end 6 7 private 8 def tag_params 9 params.permit(:title,group_ids:[]) 10 end
:params {"authenticity_token"=>"Bm7Oa...", "title"=>"aaaaa", "commit"=>"作成", "group_ids"=>["1"], "controller"=>"tags", "action"=>"create"}
:tag_params {"title"=>"aaaaa", "group_ids"=>["1"]}
これをnativeJavaScriptで非同期させたいのですが、
ruby
1:tags_controller.rb 2 3 def create 4 @tag=Tag.create(tag_params) 5 respond_to do |format| 6 format.html {redirect_to :root} 7 format.json {render json: @tag} 8 end 9 end 10 11 private 12 def tag_params 13 params.permit(:title,group_ids:[]) 14 end
javascript
1form_tag_create.addEventListener('submit',function(e){ 2 3 e.preventDefault(); 4 5 let method=this.getAttribute("method"); 6 let url=this.getAttribute("action"); 7 let formData=new FormData(this); 8 let jsonData={}; 9 10 formData.forEach(function(value, key){ 11 if(key.endsWith("_ids[]")){ 12 jsonData[key]=[value]; 13 }else{ 14 jsonData[key]=value; 15 } 16 }); 17 18 let json=JSON.stringify(jsonData); 19 20 let xhr=new XMLHttpRequest(); 21 xhr.open(method,`${url}.json`); 22 xhr.setRequestHeader('Content-Type', 'application/json'); 23 xhr.send(json); 24 25});
:params {"authenticity_token"=>"Bm7Oa...", "title"=>"bbbbb", "group_ids[]"=>["1"], "controller"=>"tags", "action"=>"create", "format"=>"json", "tag"=>{"title"=>"bbbbb"}}
:tag_params {"title"=>"bbbbb"}
上記ではtagは登録されるのですが、中間テーブルgroup_tagsには登録されませんでした。
どのように修正すればよいのか、詳しい方がいらっしゃいましたら幸いです。
jqueryは訳有って使用できません。
javaScripは後ほど関数にして他でも使用予定です。
ご存じの方がいらっしゃいましたら、以上よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。