やりたいこと
Ruby on Rails の has_many と belongs_toを使い Userのsubject要素だけをpostsで表示したい。
わからないこと
今学生版のtwitterのようなアプリを作っており、自分とおなじ学部(subject)の人だけのpostsに表示したいのですが。has_many と belongs_toを使ってもうまく表示できません。
class PostsController < ApplicationController def index @posts = Post.all.order(created_at: :desc) @posts = Post.search(params[:search]) end def index_updated_at @posts = Post.all.order(updated_at: :desc) end def index_relative end
Userの投稿をTeratailのように 作成順(index) 更新順(index_updated_at) 関連順(index_relative)
関連順のindexでは自分とおなじ学部(subejct)の人の投稿だけを表示するのようにしたいです。
作成順 更新順は上記のコードのようにできましたが、関連順は Post model と User model の関連性を示さなければいけないですがそれのやり方がわかりません。
class Post < ApplicationRecord belongs_to :holder, class_name: 'User', foreign_key: 'user_id'
class User < ApplicationRecord has_many :posts, dependent: :destroy
上記は has_many belongs_to の関係性のmodelです。
<div class="main posts-index"> <div class="container"> <div class="posts-search"> <ul> <li><%= link_to("/posts/index") do %> <i class="fas fa-indent"> 作成順</i> <% end %> </li> <li> <%= link_to("/posts/index/updated_at") do %> <i class="fas fa-indent"> 更新順</i> <% end %></li> <li> <%= link_to("/posts/index/relative") do %> <i class="fas fa-indent"> 関連順</i> <% end %></li> </ul> </div> <br> <br> <% @posts.each do |post| %> <div class="posts-index-item"> <% if Star.find_by(post_id: post.id)%> <i class="fas fa-certificate"></i> <% end %> <%= link_to image_tag("/user_images/#{post.user.image_name}"), "/users/#{post.user.id}"%> <%= link_to(post.user.name, "/users/#{post.user.id}", {class: "text-weight"})%> <%= link_to(post.user.uni, "/#{post.user.uni}/index", {class: "text-weight"})%> <%= link_to(post.user.subject, "/#{post.user.uni}/#{post.user.subject}/index ", {class: "text-weight"})%> <p class="post-created_at"><%= time_ago_in_words post.created_at%>前</p> <br> <%= link_to(post.title.truncate(50), "/posts/#{post.id}", {class: "text-weight"})%> <br> <%= link_to(post.content.truncate(80, omission: '...もっと見る'), "/posts/#{post.id}") %> </div> <% end %> </div> </div>
上記はindex_relative.html.erbのviewです。
class CreateUsers < ActiveRecord::Migration[6.0] def change create_table :users do |t| t.string :name t.string :email t.text :uni t.text :subject t.string :image_name t.string :password t.timestamps end end end
class CreatePosts < ActiveRecord::Migration[6.0] def change create_table :posts do |t| t.text :title t.text :content t.integer :user_id t.timestamps end end end
上記はUserとPostのmigrationファイルのなかみです
どのようにしたらpostをuserモデルの関係性を示し、自分をおなじ学部(subject)のユーザーの投稿のみを表示できるようになるでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/15 07:02
2020/07/15 07:48
2020/07/15 09:09