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などのオープンソースの仕組みの魅力を知れた気がして嬉しい。本質をもっと理解して、発信いつかしてみたい!

  • 今日会社で参加した研修が、役立つ内容でとてもよかった。(現在行っている仕事内容において、自分だけでなく、相手にも主体的になってもらうにはどうしたら良いかと常日頃試行錯誤しているため)

  • 教えてもらった本を読み始めた。(ありがとうございます!)

www.amazon.co.jp

  • Web業界について、全然知らなかったことを痛感した。丸3ヶ月プログラミング勉強をやってきて、これからプログラマーになるための転職活動を本格的に始めるので、今のタイミングで読めてよかった。

  • 本を読みながら、今一度将来自分がどんなプログラマーになりたいのか整理しようと思った。具体的には、プログラミング勉強を始めた初期の頃に出会い(一方的に)憧れている方がいるので、掘り下げて思考を整理しようと思う。



これから理解したいこと(覚書用)

  • Formオブジェクト(モデルの存在しないデータを更新)


  • エラー解決

  • カラムの追加方法、ロールバック

  • 環境変数(OSの知識)

  • 環境構築、バージョン対応

  • GitHub(他のアプリケーションと連携・自分に取り入れること)

  • Herokuのデプロイ方法 👉11/15・16学習 50%進む

  • README(DB設計だけでなく、全体について取扱説明書としてどんな風に書くと良いのか)

  • リファクタリング

  • データベースをインポート、エクスポート

  • Docker

  • gimei(Gem)