僕さん的jqueryで画面の動的更新手法(辛い)イケメン「僕さん。僕「そのくらい分かるわ。部分テンプレート(パーシャル)でしょ?」イケメン「そうです。パーシャルを使います。↓みたいな、view_helperを使った記法とかやろがい。>イケメン「バカにしてないですよ!僕の案はこの2つを使って、かつ、画面を遷移せずに動的にdomを更新したらどうでしょう?って言いたいんです。僕「は?でも、パーシャルって↓みたいに、viewの中で呼び出すでしょ。最初に画面に描画して終わりじゃん。後はjqueryを使って画面を動的に更新していくだけだろ。僕「そりゃajaxで↓みたいに。contoroller#viewに表示される性別用のセレクトボックス変更時に、選ばれた性別で絞り込んだデータを動的にサーバーからもらうイメージです。僕「業務システムにありがちだね。//〜みたいに手動でdomを生成する無間地獄。name属性やid属性の間違いは許されない})イケメン「先輩。こんなんだから、jqueryだと変数の管理も大変だし、dom生成も大変だし、どこでうっかりname属性とかid属性とか間違えないかヒヤヒヤしなければいけないし、jquery嫌いなんだよ。それはjqueryが悪いのではなく、Railsの機能と上手く連携できていない先輩の方が悪いですよ。僕「でも、例えばoptions_for_selectで生成される、domを使いたくても、解釈してくれないじゃん。自分でformを作っていかないと仕方ないよね?↓みたいに。%>記法もoptions_for_selectメソッドも解釈できません。Railsのメソッドですし。イケメンの案(DOMの動的生成もRailsの力を借りる)イケメン「まず、options_for_selectを例にRails側でhtmlを整形してもらって、それをjqueryでviewに当てはめる例を見てみましょう。#js側でdomを生成せずにRailsで生成したdomを返せるようにhelperをinclude(正直これが正しいやり方かわからないです。$(セレクトボックス).append(json);});イケメン「正直view_helperをコントローラーで使うことの是非は分かりません。僕「確かに行数は短くなるし、Railsのview_helperを使えるなら、ちゃんとした引数を渡せば、必ず一定の形に整えてくれるから、良いかも・・・」イケメン「私的には、Railsの機能を活用できて、いいなぁと思っています。僕「話の流れ的に、Railsのコントローラー側で、あらかじめ用意している部分テンプレートに必要な変数(プロパティ的な)を引き渡したものを、htmlの文字列に変えて、jsに渡すんかな?」イケメン「おっしゃる通りです!↓みたいなイメージですね。templateを用意。name="boku_new[1][seibetu]"></select>のようなhtmlタグを作ってくれるイメージ。});})僕「色々やっているように見えるけど、単にあらかじめ用意していた部分テンプレートを、controllerでhtmlに解釈してもらって、jqueryはそのまま当て込むだけってことなんやね。」イケメン「そうなんですよ!これでRailsのview_helper、部分テンプレートの良さを活かしながら、動的にDOMを更新していくことができるんですよ!ちなみに、この例だとformでサブミットした時に、↓のような形でパラメーターが飛ぶので、一々jsで飛ばすパラメーターを成形したりする必要もありませんし、Railsでcreateするのも楽ですよね。そんなこんなで僕「なるほど。確かにSPAとか色々出てきている中で、jqueryは古く見えるかもしれないけど、要は使い方で、せっかくRails使ってるんだから、その恩恵をガッツリ使ってしまえば良いっていう考えがあるのか。このやり方には色々と賛否もあられるとお思います。この業界に入って8ヶ月の僕が色々な人の実装を見て、考えた方法ですから。」イケメン「ただ、それでも僕は、view一つでも出来れば共通化しておけば、エラー時の原因の特定が容易になるし、手戻りが生じたときも修正しやすいと思っていますけどね。