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

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

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

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

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

0回答

1262閲覧

Rails+jsで動的な多言語対応フォームを作りたい

mttkd399

総合スコア13

Ruby

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

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

0クリップ

投稿2018/11/30 15:39

編集2018/12/04 10:41

ユーザーが自身の情報を設定できる画面で、そのユーザーが選択した言語に対してフォーム要素を表示し、データを保存したいです。
・DBには該当カラム(日本語)と、該当カラム_en(英語)、該当カラム_ch(中国語)を用意
・該当ページ=> '/users/settings'
・該当ページには言語を選択するselectボックス、実際に値を入力するフォームを設置
・selectで選んだ言語に対してフォームのvalue値が動的に変わり、フォームによるパラメータの保存先も言語ごとに設定できるようにしたい

該当コード

ruby

1# ルーティング 2/users/settings => settings#root 3/settings/get_location => settings#get_location 4 5# Userモデル 6- nickname 7- nickname_en 8- nickname_ch 9- profile 10- profile_en 11- profile_ch 12 13# Usersコントローラー 14...15 16# settingsコントローラー 17def root 18 @user = current_user 19end 20 21def get_location 22 render partial: 'localized_form', locals: {localized_nickname: params[:localized_nickname].to_sym} 23end 24

haml

1// /settings/root.html.haml 2// 独自のformヘルパーを使用(form_forの拡張) 3// ヘルパーメソッドの内部で、selectタグによって言語を選択できるように設定 4= my_own_form_for @user, class: "user-form" do |f| 5 = f.my_own_text_field(:nickname) 6 = f.my_own_text_field(:profile) 7 8// jqueryを使用 9:javascript 10 $('.localized-form > select').on('change', function(e) { 11 e.preventDefault(); 12 locale_id = parseInt($(e.currentTarget).find('option:selected').val()) 13 if locale_id == 2 14 localized_nickname = 'nickname_en' 15 localized_profile = 'profile_en' 16 else if locale_id == 3 17 localized_nickname = 'nickname_ch' 18 localized_profile = 'profile_ch' 19 else 20 localized_nickname = 'nickname' 21 localized_profile = 'profile' 22 23 $.ajax( 24 type: 'GET' 25 url: '/settings/get_location' 26 data: { 27 localized_nickname: localized_nickname 28 } 29 ).done (data) -> 30 $('.localized_form').html(data) 31 });

html

1// 上記コードが吐き出すselect要素は以下のようなもの 2<div class='localized-form'> 3 <select> 4 <option value=1 selected="selected">日本語</option> 5 <option value=2>英語</option> 6 <option value=3>中国語</option> 7 </select> 8</div>

haml

1// partial下の'_localized_form.html.haml' 2= f.my_own_text_field(localized_nickname)

実現したいこと

selectで選択した言語に応じて該当form要素を再描画(or更新)する
・f.my_own_text_field(:nickname)で:nicknameの部分を動的に更新したい(このシンボル値がformのvalue値を表示する時とデータベースへ保存する際に参照される)

詰まっているところ

・ajaxで'ActionView::MissingTemplate'エラーが発生する
・仮にajax通信が成功したとしても、paramsの中身(localized_nickname)をどのようにviewに渡してform部分を更新したら良いのかわからない

初歩的な質問かもしれませんがよろしくお願いいたします。不備があれば追記して行きます。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問