1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

とほほのRuby on Rails入門を参照しながら、よくわかっていないことをまとめた

Posted at

とりあえずやってみようという感じで手を出した際の雑多なメモです。
お世話になったサイトは以下です。

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アクションに該当するページ」に遷移するそうです。

app/controllers/books_controller.rb抜粋
  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に遷移するか、を勝手に決めてくれます。

app/views/books/new.html.erb
<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 %>

labeltext_fieldについては、Railsドキュメントの記載に沿って記せば、ラベルとテキストボックスが生成されると理解?しました。

4.6 編集画面を作成する patch

progateでルーティングに触れたときは、patchに触れていなかったので、「君、だれ?」となりました。

config/routes.rb
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)ということが規定されています。

app/models/book.rb 抜粋
class Book < ApplicationRecord
  has_many :comments
  ...
end

以下では、@bookという一つのデータに関連付けられたcommentsを作成しています。@bookという一つのデータに関連付けられたcommentsを取得する場合は、@book.commentsとします。

app/controllers/comments_controller.rb 抜粋
@comment = @book.comments.create(comment_params)

アソシエーションについては、以下の記事に詳しく書かれています。

おわりに

色々なことが抜けているかとは思いますが、少し手を動かしただけでもアプリケーションの形になって楽しかったです。早くアプリケーション作れるようになりたいです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?