3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

投稿にタグ、カテゴリー付け タグで検索できるようにする(単数タグ)ジャンル検索 タグ検索

Posted at

やりたいこと

①投稿時にカテゴリータグ追加。 ②カテゴリーのリンク押すと、同じカテゴリーの投稿を取り出せる ("プログラミング"押すと、同じくプログラミングというタグで投稿されてる記事一覧を見れる)

スクリーンショット 2021-07-29 9.35.02.png

スクリーンショット 2021-07-29 9.36.17.png

まずはカテゴリーを追加できるようにする

マイグレーションファイル記述

カテゴリーカラムを追加しました。

class CreateBooks < ActiveRecord::Migration[5.2]
  def change
    create_table :books do |t|
      t.text :title
      t.text :body
      t.string :category
      t.references :user,foreign_key:true
      t.timestamps
    end
  end
end

Viewファイル

form_withで受け取る

<%= form_with model:@book,url:books_path,local:true do |f| %>
 <label>Title</label>
 <p><%= f.text_field:title %></p>
 <label>Opinion</label>
 <p><%= f.text_area:body %></p>
  <label>カテゴリー</label>
 <p><%= f.text_field:category %></p>

コントローラー修正

カテゴリーも保存できるように修正。
private
  def book_params
    params.require(:book).permit(:title,:body,:category)
  end

View

一覧画面にカテゴリー表示する。
<% @books.each do |book| %>
 
<td><%= link_to user_path(book.user.id) do %>
<%= attachment_image_tag book.user, :profile_image,format: 'jpeg',size: "40x40", fallback: "no_image.jpg" %>
<% end %></td>
 
<td><%= link_to book_path(book.id) do %><%= book.title %></td>
<td><%= book.body %></td>
<td><%= book.category%></td>

ここまではカラムを追加するだけなので、なんてこともなくできました。

タグのリンクで検索できるようにする

コントローラー/ルーティング記述

books_controller.rb
   def search_book
     @book=Book.new
     @books = Book.search(params[:keyword])
   end
routes.rb
get "search_book" => "books#search_book"

Viewファイル記載 検索ワードを受け取る

viewを以下の通りに書き換えます。
<td>
<%= link_to book.category, search_book_path(keyword: book.category) %>
</td>

book.categoryを、search_book_pathにkeywordとして送っています。
そのキーワードをコントローラーで受け取っています。

モデルファイルに検索方法記述

book.rb
def self.search(search_word)
    Book.where(['category LIKE ?', "#{search_word}"])
end

完全一致で検索しています。
self.searchは、Book.searchですね。これはコントローラーから、(search_word)に入る値を送っています。

Viewの記述:検索結果の表示

views/books/search_book.html.erb

省略

<tr>
 <% @books.each do |book| %>
 
<td><%= link_to user_path(book.user.id) do %>
<%= attachment_image_tag book.user, :profile_image,format: 'jpeg',size: "40x40", fallback: "no_image.jpg" %>
 <% end %></td>
 
<td><%= link_to book_path(book.id) do %><%= book.title %></td>
<td><%= book.body %></td>
<td><%= link_to book.category, search_book_path(keyword: book.category) %></td>

省略

次回は、複数タグ付けれるようにする!!!!!!

3
3
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
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?