###### tags: `rails` Rails ただのアウトプット === form withメソッド --- 前提として、Viewでフォームを作成するときに使うメソッド オプションを付けることで、メソッドやフォーマットを指定することが出来るが、今回は「form withに記入した値を空のモデルに代入する」という方法が分からなかったのでメモを残した。 要は:modelオプションとnewメソッドの使い方が分からなかったのである。 結論:@book = Book.new→このように表示するviewに対応するコントローラーに(indexのビューだったら対応するコントローラのindexメソッドの中に)記述する これは何を表しているか。 Book.newでBookクラスの空のインスタンスを作り、@bookインスタンス変数へ代入している。 今回のコード ``` <h2>New book</h2> <%= form_with model:@book,local:true do |f| %> <% if @book.errors.any? %> <div id="error_explanation"> <h2><%= pluralize(@book.errors.count, "error") %> prohibited this book from being saved:</h2> <ul> <% @book.errors.full_messages.each do |message| %> <li><%= message %></li> <% end %> </ul> </div> <% end %> <div class="field"> <%= f.label :title %> <%= f.text_field :title %> </div> <div class="field"> <%= f.label :body %> <%= f.text_area :body %> </div> <div class="actions"> <%= f.submit %> </div> <% end %> ``` ``` class BooksController < ApplicationController def top end def index @books = Book.all @book = Book.new end def create @book = Book.new(book_params) if @book.save flash[:notice] = "Book was successfully created." redirect_to book_path(@book.id) else @books = Book.all render :index end end def show @book = Book.find(params[:id]) end def edit @book = Book.find(params[:id]) end def update @book = Book.find(params[:id]) if @book.update(book_params) flash[:notice] = "Book was successfully updated." redirect_to book_path(@book.id) else render :edit end end def destroy book = Book.find(params[:id]) book.destroy redirect_to books_path end private def book_params params.require(:book).permit(:title, :body) end end ``` まずは、フォームの内容を格納するために.newメソッドでモデルオブジェクトを作成し、それを変数fに代入。 そのfにメソッド機能を使用することでフォームのテキストエリアやボタンを作成している。 [これ参考にすれば、全てが分かる](https://hackmd.io/ATdLq6SbQGyQgr-11ik37g) [参考](https://railsdoc.com/page/form_with) syntaxは構文って意味