LoginSignup
2
4

More than 3 years have passed since last update.

ECサイトにおけるジャンル検索(customer側)

Posted at

1. 前提条件

app/models/genre
has_many :items
app/models/item
belongs_to :genre

genreとitemは1対多の関係となっています。

2.genreコントローラ,view, route.rbの作成

以下のコードでジャンルのコントローラとshowページを作ります。
$ rails g controller Genres show

以下のコードをroute.rbに記載します。

config/route.rb
resources :genres, only: [:show]

以下のコードをgenre_controllerに記載します

app/controllers/genre_controller.rb
    def show
          @genres = Genre.all
          @genre = Genre.find(params[:id])
    end

3.showページにgenreに基づいたitem一覧を表示させる

showページに以下のコードを記載

app/views/genre/show
<div class="item-index-box">

    <!-- ジャンル選択のサイドバー -->
    <%= render "items/genres_sidebar", genres: @genres %>
    <!-- ジャンル選択のサイドバー -->
    <div class="item-index">
    <h3>商品一覧</h3>
        <table>
          <tbody>
            <tr class="item-box">
              <% @genre.items.each do |item| %>
                <td class="item">
                    <%= link_to item_path(item) do %>
                      <%= attachment_image_tag(item, :image, :fill, 300, 300, fallback:"top.image.jpg") %><br>
                      <%= item.name %><br>
                      ¥<%= item.price %>
                    <% end %>
                </td>
              <% end %>
            </tr>
          </tbody>
        </table>
    </div>
</div>

@genre.itemsとすることでgenreに基づいたitem一覧を表示させることができる。

5. 今回の実装で学んだこと

当初itemsコントローラ内にgenreアクションを追加し、ルートもresources:items内にしていたのだがそうするとルートがitemsのidを取ってしまう為、新たにコントローラとルートを付け加えた。

2
4
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
2
4