【rails】「CREATE」newアクション②

※本サイトで紹介している商品・サービス等の外部リンクには、アフィリエイト広告が含まれる場合があります。

CRUD(クラッド)とは

Create・Read・Update・Delete のこと

Webアプリケーションの基本的な機能をすべて備えているものを「CRUDアプリ」という


Create

「Create」(POSTリクエスト)

  • 記事を作成する

前回の続きに、以下を実装する

今回、実装したいこと

newアクション:投稿画面を作成する


:createを定義する

post先のurlを取得するために:createを書き加える(後述)

  resources :articles, only: [:show, :new, :create]

@article = Article.new

app/controller/article_controller.rbに以下を記入

    def new
        @article = Article.new
    end

まだなにも入っていない、空の@articleを作る


フォームタグを作成する

(model:◯◯ , url:◯◯ , method:◯◯ )をそれぞれ指定する

app/views/articles/new.html.erbにコードを追加する

<div class="container">
    <%= form_with(model: @articcle, url: articles_path, method: 'post', local: true) do |f| %>
    <% end %>
</div>

model: @article

どのモデルを更新しようとしているのか? → 記事の情報

@article = Article.new」によって、まだなにも入っていない@articleが渡される

→ form_withにより@articleが更新される


url: articles_path

↓ POSTリクエストを行いたいので、「articles_path」を指定する


method: ‘post’

フォームを使うときのメソッドは複数あるので、投稿を保存するときはpostメソッドで指定する


local: true

local: trueについてはまだ難しいのでいずれ学習する(らしい)

form_withを使うときはlocal: trueも使う、と覚えておけば◯

フォームタグまとめ
  1. articleモデルを更新する
  2. articles_path(articles#create)にPOSTリクエストを送りたい
  3. 投稿を保存するのはpostメソッドになる

投稿画面を作る

投稿フォームを作る

<%= f.text_field :title %>と記入する

※ 先頭の「f」は「form」の意味

<div class="container">
    <%= form_with(model: @article, url: articles_path, method: 'post', local: true) do |f| %>
    <div>
        <%= f.text_field :title %>
    </div>
    <% end %>
</div>

↓ 検証で確認すると、railsがうまいこと書き換えてくれている

    <div>
        <input type="text" name="article[title]" id="article_title">
    </div>

フォームヘルパー

<%= f.text_area :content %>でも出来て、こっちのほうは見た目が大きい

f.text_fieldf.text_areaのことを「フォームヘルパー」と呼ぶ


保存ボタンを作る

<%= f.submit '保存' %>で、「保存」と書かれたボタンができる


ラベルをつける

<%= f.label :title, 'タイトル' %>と記入する

    <div>
        <%= f.label :title, 'タイトル' %>
    </div>
    <div>
        <%= f.text_field :title, class: 'text' %>
    </div>
    <div>
        <%= f.label :content, '内容' %>
    </div>
    <div>
        <%= f.text_area :content %>
    </div>
  • このときlabel:は、
    カラムと対応させること
  • classは「class: 'text'」で
    設定できる

railsのルール、書き方を覚えてhtmlに表示できるようにしないといけない

#DAY11