ご回答いただけるとありがたいです。よろしくお願いします!
実現したいこと
フォロー中のユーザーの全ツイートを新しい順にトップページに表示したいです。
現状
フォロー中のユーザーの全ツイートをトップページに表示させることはできていますが、順番がユーザー登録の順番です。
例えば
1、User1がtweet1を投稿
2、User2がtweet2を投稿
3、User1がtweet3を投稿
1から3の順で投稿していても、表示される順は上から
2、User2がtweet2を投稿
3、User1がtweet3を投稿
1、User1がtweet1を投稿
になります。
該当のソースコード
model
1#relationship 2class Relationship < ApplicationRecord 3 belongs_to :user 4 belongs_to :follow, class_name: 'User' 5 6 validates :user_id, presence: true 7 validates :follow_id, presence: true 8end 9 10#tweet 11class Tweet < ApplicationRecord 12 belongs_to :group 13 belongs_to :user 14 has_one_attached :image 15 16 validates :content, presence: true, unless: :was_attached? 17 18 def was_attached? 19 self.image.attached? 20 end 21end 22 23#user 24class User < ApplicationRecord 25 devise :database_authenticatable, :registerable, 26 :recoverable, :rememberable, :validatable 27 28 validates :nickname, presence: true 29 30 has_many :group_users 31 has_many :groups, through: :group_users 32 has_many :tweets 33 has_many :owned_groups, class_name: "Group" 34 35 has_many :relationships 36 has_many :followings, through: :relationships, source: :follow 37 has_many :reverse_of_relationships, class_name: 'Relationship', foreign_key: 'follow_id' 38 has_many :followers, through: :reverse_of_relationships, source: :user 39 40 def follow(other_user) 41 unless self == other_user 42 self.relationships.find_or_create_by(follow_id: other_user.id) 43 end 44 end 45 46 def unfollow(other_user) 47 relationship = self.relationships.find_by(follow_id: other_user.id) 48 relationship.destroy if relationship 49 end 50 51 def following?(other_user) 52 self.followings.include?(other_user) 53 end 54 55end
controller
1#relationships 2class RelationshipsController < ApplicationController 3 before_action :set_user, only: [:create, :destroy] 4 5 def index 6 @followings = current_user.try(:followings) 7 end 8 9 def create 10 following = current_user.follow(@user) 11 following.save 12 redirect_to @user 13 end 14 15 def destroy 16 following = current_user.unfollow(@user) 17 following.destroy 18 redirect_to @user 19 end 20 21 def following 22 @user = User.find(params[:id]) 23 @followings = @user.followings 24 end 25 26 def follower 27 @user = User.find(params[:id]) 28 @followers = @user.followers 29 end 30 31 private 32 33 def set_user 34 @user = User.find(params[:follow_id]) 35 end 36 37end
view
1#relationships#index 2(省略) 3<% @followings.each do |following| %> 4 <% following.tweets.order("created_at DESC").each do |tweet| %> 5 <div class="tweet"> 6(省略)
###試したこと
controller
1#relationships 2 def index 3 @followings = current_user.try(:followings).order("created_at DESC") 4 end
同じ結果になる + ログアウトしたら以下のエラーが出る
Error
1NoMethodError in RelationshipsController#index 2undefined method `order' for nil:NilClass
以上になります。ご助言いただけると幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/08 13:36