とりあえずやってみようという感じで手を出した際の雑多なメモです。
お世話になったサイトは以下です。
3.10 スキャフォールド(scaffold)とは何か
ルーティングやコントローラー(controller)、ビュー(view)、モデル(model)とテーブル(データベース)の記述やファイルなどを自動で作成してくれるコマンドです。
実際に以下を実行してみると、大量のファイルが自動で生成されました。
しかも既にxxx.html.erb等のファイルの中身まで書かれている。ルーティングも自動で生成されているため、scaffoldを実行してすぐに動かすことができます。
rails generate scaffold User name:string age:integer
ただ、自分が理解できていないものもたくさん生成されるので、使っていいものかという気分に。
4.5 作成画面を作成する redirect_to
redirect_to
の後ろくるのはURLやアクションだけだと思っていました。DBから取得したデータを指定すると、そのコントローラ(books_controller)の「showアクションに該当するページ」に遷移するそうです。
def create
@book = Book.new(book_params)
if @book.save
redirect_to @book
else
render :new, status: :unprocessable_entity
end
end
private
def book_params
params.require(:book).permit(:title, :author)
end
4.5 作成画面を作成する form_with
form_with
を使用すると、引数として渡されたモデルのインスタンス(オブジェクト)に値が入っているか否かによって、submit
ボタンを押したときに、create
に遷移するか、update
に遷移するか、を勝手に決めてくれます。
<h1>Books</h1>
<a href="/books">Return</a>
<%= form_with model: @book do |form| %>
<div>
<div><%= form.label :title %></div>
<div><%= form.text_field :title %></div>
</div>
~略~
<div>
<%= form.submit %>
</div>
<% end %>
label
とtext_field
については、Railsドキュメントの記載に沿って記せば、ラベルとテキストボックスが生成されると理解?しました。
4.6 編集画面を作成する patch
progateでルーティングに触れたときは、patch
に触れていなかったので、「君、だれ?」となりました。
Rails.application.routes.draw do
...
patch '/books/:id', to: 'books#update'
end
Ruby on Railsのroutes.rbでは、HTTPメソッドを使用してroutingを定義している。
モデルのデータを更新したい場合、PATCHを使うことが推奨されている。
https://yasasisa.hatenablog.com/entry/2019/11/04/141830 をもとに要約
POSTとPATCH/PUTは、「冪等性(べきとうせい)」という違いがあるそうです。冪等性とは、何度実行しても常に同じ結果になる操作のことで、POSTには、冪等性がなく、PATCH/PUTには冪等性があります。具体的な説明は、以下の記事を読みましょう。
5.4 パーシャルとは
パーシャルとは、「部分的な」、「一部の」を意味する言葉。部分テンプレートとも呼ばれる。ビューの一部を切り出して、他のビューから呼び出して使用する。
6.1 バリデーションを追加する full_messages_for(属性)
full_messages
:すべてのエラーメッセージを取得する
full_messages_for(属性)
:指定した属性のすべてのエラーメッセージを取得する
6.2 コメント機能を追加する アソシエーション
アソシエーションとは、モデルの関連付けに使用される概念です。6.2内にしれっと書かれているhas_many
のような記述が、それにあたります。
今回の場合ブックモデルが、複数(many)のcommentsを持つ(has)ということが規定されています。
class Book < ApplicationRecord
has_many :comments
...
end
以下では、@book
という一つのデータに関連付けられたcomments
を作成しています。@book
という一つのデータに関連付けられたcomments
を取得する場合は、@book.comments
とします。
@comment = @book.comments.create(comment_params)
アソシエーションについては、以下の記事に詳しく書かれています。
おわりに
色々なことが抜けているかとは思いますが、少し手を動かしただけでもアプリケーションの形になって楽しかったです。早くアプリケーション作れるようになりたいです。