###実現したいこと
if文をwhere条件に書き換えたいです。
###コード
if
1<% if @current_user.following?(post.user) || @current_user.id == post.user_id %>
自分がフォローしているユーザーのポスト or 自分のポスト というif文です。
そこで、where条件を使い、Controller内に書き換えようとしましたが、エラーでうまくいきません。
Controller
1Post.joins(:user).where("@current_user.following?(users) or users.id =?",@current_user.id)
Error
1wrong number of bind variables (1 for 2) in: @current_user.following?(users) or users.id =?
調べると、?の個数と引数の個数が合っていない見たいでした。
そこで、このように書き換えて見ましたが、別のエラーが出てしまっています。
Controller
1Post.joins(:user).where("@current_user.following?= ? or users.id =?",(users) ,@current_user.id)
Error
1undefined local variable or method `users' for #<PostsController:0x00007fa8b720cc60>
お分かりの方、ぜひ助言を宜しくお願いします。
追記
userrb
1class User < ApplicationRecord 2 has_many :posts, dependent: :delete_all 3 has_many :active_friendships, class_name:"Friendship", foreign_key: "follower_id", dependent: :destroy 4 has_many :passive_friendships, class_name:"Friendship", foreign_key: "followed_id", dependent: :destroy 5 has_many :following, through: :active_friendships, source: :followed 6 has_many :followers, through: :passive_friendships, source: :follower 7 8 def follow(user) 9 active_friendships.create(followed_id: user.id) 10 end 11 def unfollow(user) 12 active_friendships.find_by(followed_id: user.id).destroy 13 end 14 def following?(user) 15 following.include?(user) 16 end 17 def posts 18 return Post.where(user_id: self.id) 19 end 20 def create_notification_follow!(current_user) 21 temp = Notification.where(["visitor_id = ? and visited_id = ? and action = ? ",current_user.id, id, 'follow']) 22 if temp.blank? 23 notification = current_user.active_notifications.new( 24 visited_id: id, 25 action: 'follow' 26 ) 27 notification.save if notification.valid? 28 end 29 end 30end 31
postrb
1class Post < ApplicationRecord 2 belongs_to :user 3 4end 5