本の投稿機能の実装、一覧表示

本の投稿機能作成

本の投稿機能を作成していく。レイアウトは最後に調整するため、不恰好である。

本の投稿機能は、サイドバーに表示させるため、多くのページに表示することになるが、

ひとまず、booksのindex画面に作成していく。

下記が実装予定の投稿機能である。

上記のようにするためにviewに記述していく。

app/views/books/index

<h2>New book</h2>
<%= form_with model: @book do |f| %>
  <div>
    <%= f.label :title %>
    <%= f.text_field :title %>
  </div>

  <div>
    <%= f.label :opinion %>
    <%= f.text_area :body %>
  </div>

  <div>
    <%= f.submit 'Create Book' %>
  </div>
<% end %>

次に、books_controllerへ記載をする。

app/controllers/books_controller.rb

  def index
    @book = Book.new
  end

  def create
    @book = Book.new(book_params)
    @book.user_id = current_user.id
    @book.save
    redirect_to book_path(@book)
  end

  private

  def book_params
    params.require(:book).permit(:title, :body)
  end

記述が完了したら、サーバーを立ち上げる。

下記のような表示になっている。

一覧機能の実装

投稿した本を一覧表示するビューを作成する。

booksのindex画面に下記のようになるように記述を変更していく。レイアウトは最後に調整するため、不恰好である。

books/index

(省略)
<div>
  <h2>Books</h2>
  <table>
    <thead>
      <tr>
        <th></th>
        <th>Title</th>
        <th>Opinion</th>
      </tr>
    </thead>
    <tbody>
      <% @books.each do |book| %>
        <tr>
          <td>
            <%= link_to user_path(book.user_id) do %>
              <%= image_tag book.user.get_profile_image(80,80) %>
            <% end %>
            </td>
          <td>
            <%= link_to book_path(book.id) do %>
              <%= book.title %>
            <% end %>
            </td>
          <td><%= book.body %></td>
        </tr>
      <% end %>
    </tbody>
  </table>
</div>

booksコントローラのindexアクションに記述を追加。

books_controller.rb

  def index
    @book = Book.new
    @books = Book.all
  end

上記記述が完了したら、サーバーを立ち上げて、新規投稿を実施する。

問題なく投稿が完了すると、下記のようにbooks/index画面に投稿した内容が表示される。下記はテストを2回投稿している。

以上。

アプリケーションの作成 参考URL  作成するアプリケーションについて - takifugu’s blog