前提・実現したいこと
Railsでユーザーのプロフィール編集画面を作っています。
ユーザーが「勉強中の言語」を選択出来るよう、セレクトボックスを設置しました。
またユーザーは複数の言語を勉強中の可能性もある為、jQueryを用いセレクトボックス横に「+」ボタンを設置し、セレクトボックスを非同期で複製出来るようにしました。
モデルではhas_many等の記述もしているのですが、ユーザーが最後に選んだ言語しか保存されません。
(日本語のみを選択した場合は日本語が保存。ユーザーがセレクトボックスを複製し、日本語、英語、中国語の順で選択した場合は中国語のみが保存されると言った具合です。)
エラーは特に表示されません。ユーザーが選んだ全ての言語を保存、表示できるようにさせたいです。
views/users/edit.html.erb
ruby
1 <%= form_tag("/users/#{@user.id}/update", {multipart: true}) do %> 2 <ul> 3 <li> 4 <div class="col-1">Spoken language:</div> 5 <div class="col-2" id="input_pluralBox"> 6 <div id="input_plural"> 7 <select name="language" class="form-control"><%= options_for_select(languages) %> 8 <input type="button" value="+" class="add pluralBtn"> 9 <input type="button" value="-" class="del pluralBtn"> 10 </div> 11 </div> 12 </li> 13 <li> 14 <div class="save"><input id="button" type="submit" value="Save" onclick="myfunk()"></div> 15 </li> 16 </ul> 17 <% end %>
options_for_select(languages)の部分ですが、言語一覧を表示してくれる「language-select」と言うgemを使用しています。
セレクトボックスを複製する「+」ボタンに関する記述。
jQuery
1$(document).on("click", ".add", function() { 2 $(this).parent().clone(true).insertAfter($(this).parent()); 3}); 4$(document).on("click", ".del", function() { 5 var target = $(this).parent(); 6 if (target.parent().children().length > 1) { 7 target.remove(); 8 } 9});
models/user.rb
ruby
1class User < ApplicationRecord 2 has_many :languages, inverse_of: :user 3end
models/language.rb
ruby
1class Language < ApplicationRecord 2 belongs_to :user 3end
追記
試しにviews/users/edit.html.erbの中の一文を以下の様に変えた所、["JA", "EN", "ZH"]と保存した全ての言語を表示させる事が出来ました。どうやら配列、ハッシュ関連の記述をいじる事で解決出来るのかもしれません。
rails
1<select name="language" class="form-control"><%= options_for_select(languages) %> 2↓ 3<select name="language[]" class="form-control"><%= options_for_select(languages) %>
しかしこれでは以下の点がまだ不完全ですので、引き続き試行錯誤しております。お分かりになる方がいらっしゃればご助言頂けると有難いです。
- valueの値がそのまま出力されている点(JA→Japaneseの様に表示したい)。
- ["hoge", "fuga"]など配列の形のまま出力されている点(シンプルに「Japanese English」の様に表示したい)。
補足情報(FW/ツールのバージョンなど)
ruby 2.6.4p104
RubyGems 3.0.3
Rails 5.2.3
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/09 00:00
2020/05/09 02:42
2020/05/09 02:57
2020/05/09 18:44
2020/05/09 18:47
2020/05/10 05:41
2020/05/10 05:44
2020/05/10 06:23
2020/05/11 07:57
2020/10/23 07:29