一覧画面に新規登録のリンクを作成する
h1 タスク一覧
# btnとbtn-primaryの2つのCSSクラスを与えることで、bootstrapがリンクをボタンにような見た目にする
= link_to '新規登録', new_task_path, class: 'btn btn-primary'
翻訳情報を追加する
has_many: "%{record}が存在しているので削除できません"
# ここから追加
models:
task: タスク
attributes:
task:
id: ID
name: 名称
description: 詳しい説明
created_at: 登録日時
updated_at: 更新日時
新規登録のためのアクションを実装
def new
# この1行を追加
@task = Task.new
end
- アクションからビューに渡したいデータをインスタンス変数にいれる
新規登録画面のビューを実装する
- ジェネレータにより、作成されたファイルを編集していく
- form_withはHTMLのform要素を作成するメソッド
- ブロック引数fに対して、text_fieldなどのメソッドを呼び出すことでフィールドを出力
h1 タスクの新規登録
.nav.justify-content-end
= link_to '一覧', tasks_path, class: 'nav-link'
= form_with model: task, local: true do |f|
.form-group
# 入力欄の名前を表示
= f.label :name
# 入力欄を出力
= f.text_field :name, class: 'form-control', id: 'task_name'
.form-group
# 説明欄の名前を表示
= f.label :description
# 説明欄を出力
= f.text_area :description, rows: 5, class: 'form-control', id: 'task_description'
# submitヘルパーを呼び出して,submitボタンを表すHTMLが表示される
= f.submit nil, class: 'btn btn-primary'
登録アクションの実装
def create
@task = Task.new(task_params)
@task.save
redirect_to @task, notice: "タスク 「#{@task.name}」を登録しました。"
end
- task_paramsには、フォームから送られてきた情報が想定通り{task: {...}}の形であることを確認して、{...}の中から、名称と詳しい説明の情報を抜き取る役割がある
レンダーとリダイレクト
- レンダー・・・アクションに続きビューを表示させること(renderメソッド)
- リダイレクト・・・アクション後にビューを表示せず、別のURLに案内すること(redirect)
.container
# ここから追加
- if flash.notice.present?
.alert.alert-success = flash.notice
# ここまで
= yield
# :flashというキーの値にハッシュとして渡せば、どんなキー(:notice,:alertなど)のデータも渡すことができる
redirect_to tasks_url, flash: {warning: "何かの警告メッセージ"}
# 直後にレンダーするビューに対してデータを伝えることができる
flash.now[:alert] = "〇〇"
flash.now.alert = "〇〇"