Ruby on Railsで写真とテキストを投稿できるSNSを作っています。
検索機能を実装したいのですがうまく動きません。
具体的にはALL
,MEN
, WOMEN
の3つのボタンを作り、ALL
の時には全てのレコード、MEN
の時には男性のレコード、WOMEN
の時には女性のレコードを表示する機能です。
現在のコードでは、ALL
の時には全てのレコード、MEN
の時には男性のレコード、なぜかWOMEN
の時にも男性のレコードが表示されてしまいます。
ユーザーはusersテーブル
という名前で、投稿はpostsテーブル
という名前を使っていて、ユーザーはdevise
を使っています。
gender_id
はActive Hash
を使っています。
user
とpost
は、1:N
の関係です。
検索のためにsearchアクション
を定義しています。
search.html.erb
はindex.htl.erb
と同じコードにしています。
###ソースコード
controller
1-----省略 2 3def search 4 @posts = Post.search(params[:gender_id]) 5 end 6 7-----省略
routes
1Rails.application.routes.draw do 2 devise_for :users 3 root "posts#index" 4 resources :posts, only: [:new, :create, :show, :destroy, :edit, :update] do 5 resources :comments, only: :create 6 collection do 7 get "search" 8 end 9 end 10 resources :users, only: :show 11end 12
model
1class Post < ApplicationRecord 2 has_many_attached :images 3 has_many :comments, dependent: :destroy 4 belongs_to :user 5 6 with_options presence: true do 7 validates :text 8 validates :images 9 validates :user 10 end 11 12 validates :text, length: { maximum: 150, message: "は150文字以下にしてください" } 13 14 def self.search(search) 15 if search = 2 16 Post.joins(:user).where("users.gender_id = 2") 17 elsif search = 3 18 Post.joins(:user).where("users.gender_id = 3") 19 end 20 end 21end 22
indexhtmlerb
1-------省略 2 3<ul class="gender-lists"> 4 <li> 5 <%= link_to "ALL", root_path, class:"gender" %> 6 </li> 7 <li> 8 <%= link_to "MEN", search_posts_path(gender_id:2), class:"gender" %> 9 </li> 10 <li> 11 <%= link_to "WOMEN", search_posts_path(gender_id:3), class:"gender" %> 12 </li> 13 </ul> 14 15-------省略
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/01 01:47
2020/09/01 02:17
2020/09/01 02:22