20201130_アウトプット(フォームオブジェクト)
今日行ったこと 3時間半
- 補足カリキュラム(1つのフォームから複数のテーブルに情報を保存するアプリ作成)
新しい発見
忘れかけていたこと
コントローラー作成時に、アクション名を指定するとビュー作ってくれる。(指定しない場合は、ビュー手作成)
ルーティングに関する変更があった時は再起動。(うまくいかない時、サーバー再起動することが多いけれど、どのタイミンングで必要なのか忘れがち・・)
アクティブハッシュ。コマンドで作成しなくても、マイグレーションファイル作らないので、直接モデルファイル作成でも良いのか。
has_one
のペアはbelongs_to
(1対1なので、親子関係を忘れて、つい相手もhas_one
しそうになる)バリデーションが掛からないのでアンチパターンと学んだものからの発見で
●ビューのform_with
にモデルを指定しなければ、そのプレフィックスで入力したフォーム内容を複数のデータベースに保存することが可能
<%= form_with(url: donations_path, local: true) do |form| %>
●コントローラーのパラムスも、対象モデルと同じ名前のコントローラーに記述すると思っていたけれど、「モデル」と「メソッドによる呼び出し」と「引数」を組み合わせればパラメーターも実現できる
def create user = User.create(user_params) Address.create(address_params(user)) redirect_to action: :index end private def user_params params.permit(:name, :name_reading, :nickname) end def address_params(user) params.permit(:postal_code, :prefecture, :city, :house_number, :building_name).merge(user_id: user.id) end
2つを知った時に「柔軟に考えればもっと広がりそう」って思った(今まで硬く考えすぎてたとも)
具体的に言うと、Rubyの「メソッド」「引数」などの本質になる部分と、RailsにおけるMVCの流れで出来ない部分(バリデーションが表示されない)を理解して、デザインパターン(応用・良いとされる手順)が出来ていくのかと自分の中で理解が深まった気がした。
Formオブジェクトパターン(新しく学んだこと)
「フォームに入力したもの」を一つのオブジェクトとして「(複数のデータベースに跨がるものでも)バリデーションをかけてデータベースに保存」する方法だと理解。(つまり、バリデーションの機能や
form_with
の引数となれる機能を搭載したカタマリ。)そのためには、アクティブモデルをincludeさせたクラスをまず作ること。
その中に、後々、コントローラーでインスタンスを生成したときに呼び出せるよう
attr_accessor
を使って、キー(カラムになる)を設定すること。クラス内に、バリデーションをかく。
クラス内に、各モデルからcreate(生成して保存する)するのを、まとめたsaveメソッドをかく。(メソッド名は任意)
コントローラーの方には、Formオブジェクトを一つのモデルとして捉えて、インスタンス変数を生成する。(ストロングパラメーターも一つに統合)
Formオブジェクトの内容が保存されるか否かで、どのアクションに飛ぶのか設定。
と理解。
- モデルのテストコードも、コントローラーと同じように、Formオブジェクトを一つのモデルと捉えて、ファイルを生成し、バリデーションがかかるか記述すればOKと理解。
感想
Railsなどの本来のフレームワークの機能がありつつ、応用して編み出した良い方法がデザインパターンなのかと理解。なので、Gemとはまた別で、デザインパターンになりうる「こういう困ったところを、こう解決できるコードです」ってGitHubで発信されているのかと思った。また一歩、GitHubなどのオープンソースの仕組みの魅力を知れた気がして嬉しい。本質をもっと理解して、発信いつかしてみたい!
今日会社で参加した研修が、役立つ内容でとてもよかった。(現在行っている仕事内容において、自分だけでなく、相手にも主体的になってもらうにはどうしたら良いかと常日頃試行錯誤しているため)
教えてもらった本を読み始めた。(ありがとうございます!)
Web業界について、全然知らなかったことを痛感した。丸3ヶ月プログラミング勉強をやってきて、これからプログラマーになるための転職活動を本格的に始めるので、今のタイミングで読めてよかった。
本を読みながら、今一度将来自分がどんなプログラマーになりたいのか整理しようと思った。具体的には、プログラミング勉強を始めた初期の頃に出会い(一方的に)憧れている方がいるので、掘り下げて思考を整理しようと思う。