ご回答いただけるとありがたいです。よろしくお願いします!
実現したいこと
フォロー中のユーザーのツイートをトップページに表示させたい。
現状
以下を参考にして、フォロー・フォロワー機能の実装は済んでいます。
https://qiita.com/mitsumitsu1128/items/e41e2ff37f143db81897
該当のソースコード
コントローラー、モデル、ビュー、のどれをどのように動かせば良いかわかっていない状態なので、該当のソースコードに関係ないものが含まれているかもしれません。
routes
1Rails.application.routes.draw do 2 devise_for :users 3 root to: "relationships#index" 4 resources :groups do 5 member do 6 get :join 7 delete :quit 8 end 9 collection do 10 get :list 11 get :search 12 end 13 resources :tweets 14 end 15 resources :users, only: [:show, :edit, :update] 16 resources :relationships, only: [:index, :create, :destroy] do 17 member do 18 get :following 19 get :follower 20 end 21 end 22end
controller
1#relationships 2class RelationshipsController < ApplicationController 3 before_action :set_user, only: [:create, :destroy] 4 5 def index 6 #ここに記述が必要ではないかと考えている。 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
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
views
1#relationship.html.erb 2<div class="tweets"> 3 <%= @tweets.each do |tweet| %> 4 <%= tweet.user.nickname %> 5 <%= tweet.content %> 6 <% end %> 7</div> 8#viewはまだ細かく記述していません。 9繰り返し処理を使って値を取得できるか確認するために、このような記述になっています。
###試したこと
controller
1#relationships 2def index 3 @followings = current_user.followings 4 @tweets = @followings.tweets 5end
Error
1NoMethodError in RelationshipsController#index 2 3undefined method `tweets' for #<User::ActiveRecord_Associations_CollectionProxy:0x00007f8bd4ecbd70> 4というエラー文が出ます。
以上になります。ご助言いただけると幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/04 12:21
2020/12/04 12:22
2020/12/04 13:11
2020/12/04 13:17