Scaffold에 확인 화면 추가

11415 단어 RubyRails

개요


scaffold에서 생성한 폼에 화면을 추가로 확인합니다.
새로 제작(new)한 확인 화면 제작이 보이지만 편집(edit)한 내용이 없어 고민이 돼서 하게 됐다.
컨트롤러의create 방법과 업데이트 방법에서 확인 화면의 표시와 저장을 DB에 구분합니다.

차리다


먼저 스캐프볼드를 만들겠습니다.
rails generate scaffold book title:string author:string

인증 추가


창의 유효성을 추가합니다.확인 화면으로 이동하기 전에 입력 값에 문제가 있는지 확인하세요.
book.rb
class Book < ApplicationRecord
  validates :title, :author, presence: true
end

컨트롤러


새로 만들 때의create 방법과 편집할 때의 업데이트 방법을 각각 변경합니다.

새로 만들다


인증에 문제가 없습니다. confirm 단추를 눌렀을 때 확인 화면을 엽니다.
백 버튼을 누르면 새 화면으로 돌아갑니다.
books_controller.rb
  # POST /books
  # POST /books.json
  def create
    @book = Book.new(book_params)

    respond_to do |format|
      if @book.valid? && params[:confirm]
        format.html { render :new_confirm }
      elsif params[:back]
        format.html { render :new }
      elsif @book.save
        format.html { redirect_to @book, notice: 'Book was successfully created.' }
        format.json { render :show, status: :created, location: @book }
      else
        format.html { render :new }
        format.json { render json: @book.errors, status: :unprocessable_entity }
      end
    end
  end

편집자


기본적으로 새로 만든 것과 같다.
자동으로 생성된 @book입니다.업데이트, assign 사용 안 함attributes를 사용하지 않고 DB에 저장하면 확인 화면이 표시됩니다.
books_controller.rb
  # PATCH/PUT /books/1
  # PATCH/PUT /books/1.json
  def update
    @book.assign_attributes(book_params)

    respond_to do |format|
      if @book.valid? && params[:confirm]
        format.html { render :edit_confirm }
      elsif params[:back]
        format.html { render :edit }
      elsif @book.save
        format.html { redirect_to @book, notice: 'Book was successfully updated.' }
        format.json { render :show, status: :ok, location: @book }
      else
        format.html { render :edit }
        format.json { render json: @book.errors, status: :unprocessable_entity }
      end
    end
  end


scaffold가 생성한 제작 화면을 변경하고 확인 화면을 추가합니다.

화면 만들기


일반commiit 단추에서 confirm 단추로 변경합니다.
_form.html.erb
  <div class="actions">
    <%= form.submit 'Confirm', name: 'confirm' %>
  </div>

화면 확인


우선 창을 호출하는 데 사용할 보기를 만듭니다.
new_confirm.html.erb
<h1>New Book Confirmation</h1>

<%= render 'confirm', book: @book %>
edit_confirm.html.erb
<h1>Editing Book Confirmation</h1>

<%= render 'confirm', book: @book %>
실제confirm의 관점은 여기에 있습니다.form.hidden_필드를 사용하여commiit 단추를 눌렀을 때 값을 받아들일 수 있도록 합니다.
그리고 이전 화면으로 돌아가기 위해 백 단추를 추가했습니다.
_confirm.html.erb
<%= form_with(model: book, local: true) do |form| %>
  <div class="field">
    <%= form.label :title %>
    <%= book.title %>
    <%= form.hidden_field :title %>
  </div>

  <div class="field">
    <%= form.label :author %>
    <%= book.author %>
    <%= form.hidden_field :author %>
  </div>

  <div class="actions">
    <%= form.submit 'Back', name: 'back' %>
    <%= form.submit %>
  </div>
<% end %>

결실


화면을 만들고 화면을 확인하는 게 그렇습니다.

화면 만들기



화면 확인



감상


Rails가 어렵네요.개선할 점이 있으면 제게 건의해 주세요.

소스 코드


소스가 여기까지 올라왔어.
https://github.com/myzkyuki/scaffold_confirm_example

좋은 웹페이지 즐겨찾기