プログラミング未経験おじさんの備忘録

本ブログはプログラミング未経験者の拙い学習の記録です。

学習[62,63,64]日目

 本日の学習内容

ビューの作成(form_forによるフォームの作成)

 

前回までの段階でモデルとコントローラーの作成まで行ったので、今回はビューの実装から入っていきます。

#hamlでのグループ新規作成画面のビューフォームの作成
 
= form_for @group do |f|
  - if group.errors.any?
    .group-form__errors
      %h2"#{group.errors.full_messages.count}件のエラーが発生しました。"
      %ul
        - group.errors.full_messages.each do |message|
          %li= message
  .group-form__field
    .group-form__field--left
      = f.label :name
    .group-form__field--right
      = f.text_field :nameplaceholder: 'グループ名を入力してください'
  .group-form__field.clearfix
    .group-form__field--left
      %label.group-form__label{:for => "group_メンバー"} メンバー
    .group-form__field--right
      = f.collection_check_boxes :user_idsUser.all:id:name
  .chat-group-form__field.clearfix
    .group-form__field--left
    .group-form__field--right
      = f.submit class: 'group-form__action-btn'

上記のようにform_forを使用して新規作成フォームの作成を行いましたが、現在ではform_withの方が一般的とのことなので次回からはそちらを使用していきたいと思います。

次いで、こちらを元に下記のようにコントローラーの編集を行っていきます。

#newアクションにてインスタンスを生成
#1モデルで設定したパラメーターの枠を持ったインスタンスが生成されるがパラメータは空
#2newアクションにて開いたビューにて作成したグループに必ずログインユーザーがチェックされるように設定
def new
    @group = Group.new
    @group.users << current_user
  end
 
#newでのビューの作成ボタンを押すとルーティングからcreateアクションが呼び出される
#フォームで入力されたパラメーターを引数としてインスタンスを生成出来た場合=>root_pathのビューへ
                          出来なかった場合=>newアクションのビューへ
  def create
    @group = Group.new(group_params)
    if @group.save
      redirect_to root_pathnotice: 'グループを作成しました'
    else
      render :new
    end
  end
 
#group_paramsによって呼び出されたメソッドから下記の処理を実施
#requireによって:groupが要求されている
peremitによって:name, { :user_ids =>  }が許可されている
  private

  def group_params
    params.require(:group).permit(:name, { :user_ids =>  })
#上記と同じ意味?
params.require(:group).permit(:nameuser_ids:[])
  end
end

上記の実装にあたりStrongParameters及びparamsに関する理解やformからどのようにパラメーターがとんでいるかの理解が全くだったので復習にかなり時間を要していまいました。少し反省です。。 

まず、ビューで作成したフォームの値がどのようにコントローラーに渡されているのかに関してですが、フォームで@モデル名でモデルを指定します。

フォーム下で作成するフォームコントールに関しても同様にモデル内のカラムを指定することで格納先を指定することが可能となります。

これによりフォームからの値の行き先を指定してあげることでボタンを押した際に値を引き渡す準備ができるようになります。

しかし、これだけでは値が一方的に引き渡されることになるだけの為、不正な値等が送られてきたときに必要のない値まで受け取ってしまうことになります。

その為、createアクションにて定義したparmsのrequireとpermit メソッドによって、受け取るリクエストパラメータの制御を行います。

require はハッシュに指定したキーが存在することを検証し、キーが存在すればその値を返します。つまり、「params.require(:group)」とした場合、:group がキーとして存在すれば「params[:group]」の値が返されます。そして、指定したキーが存在しない場合は例外 ActionController::ParameterMissing を raise します。

permit はハッシュから指定したキーだけを取り出します。指定しなかったキーがハッシュに含まれていても、戻り値にそれらの値は含まれません。

そしてcreateされるタイミングでモデルにて設定したvalidationの検証も実行されるのでそちらの条件の検証が行われることも注意しなければなりません。

 

本日の英単語

abbreviation:略語

 

以上で、数日間の学習内容をまとめを終了します。

感じたことは完全にわからなことを調べるうちにわからないことに必要な文章にわからない単語がある状態がループしてこちらもまとめるだけで不要な時間と労力を要してしまったのが反省点です。

今度から注意していかなければと思いました。

わからないところのわからないものはそういうものだと認識して次に進む必要性を感じました。

 

参照:https://www.pikawaka.com/rails/form_for#form_for

  :https://www.sejuku.net/blog/13163#html

  :https://ruby-rails.hatenadiary.com/entry/20140727/1406448610

  :https://mon-sele.com/post18/

  :https://www.sejuku.net/blog/29763#params

 

 

form_withを必死に使用しましたが、rails -vで確認したら5.0.7.2の為、今回使用出来なかったform_withに関して(5.1以降のverで使用可能)

参照:https://web-camp.io/magazine/archives/17665

  :https://techracho.bpsinc.jp/hachi8833/2017_05_01/39502

  :https://matt-note.hatenadiary.jp/entry/2018/10/01/201530

  :https://www.techry.net/blogs/1361