今回はプロゲートの中級 3章の「scaffoldのコードに近付けよう(2)」をやっていきます。
form_tagとform_for
form_tag:モデルオブジェクトに紐付かない検索フォームを表示する場合に用いる。
form_for:モデルオブジェクトの属性を入力フォームに表示する場合に用いる。
form_tagを用いる場合
<%= form_tag note_path(@note.id), method: 'patch' do %> タイトル <%= text_field_tag 'note[:title]', @note.title, class: "form-control..." %> 内容 <%= text_area_tag 'note[:content]', @note.content, class: "form-control..." %> <%= submit_tag '保存', class: "btn..."%> <% end %>
form_forを用いる場合
<%= form_for(@note) do |f| %> タイトル <%= f.text_field :title, class: "form-control..." %> 内容 <%= f.text_area :content class: "form-control..." %> <%= f.submit '保存', class: "btn..."%> <% end %>
パーシャル
コードを見やすくしたり、コードの重複を除去するためにコードの一部を抜き出したファイルのことを
パーシャルと呼ぶ。ファイル名の頭に「_」アンダースコアを付与する。
_form.html.erb
<%= form_for(@note) do |f| %> ・・・ <% end %>
呼び出し方
<%= render 'form' %>
Rails updateメソッド
Railsの標準関数のupdateメソッドについての記述方法、動作について確認する。
updateメソッドを用いない場合
def update @note.title = params[:note][:title] @note.content = params[:note][:content] @note.save redirect_to note_path(@note.id), notice: '記事は編集されました。' end
updateメソッドを用いる場合
def update # note, title属性を保持したnoteハッシュを受け取り、DBを更新する。 if @note = update(note_params) redirect_to @note, notice: '記事は編集されました。' else render :edit end private def note_params # noteキーのハッシュにおいてtitle,contentのみ許可する。ストリロングパラメータを設定 params.require(:note).permit(:title, :content) end end