показывать отзывы для current_user только с помощью devise

Я создаю приложение, в котором участник регистрируется и может создать сообщение, а пользователи могут писать отзывы об этом сообщении без необходимости регистрироваться, у обзоров есть собственное представление индекса. Я искал вокруг, но не могу найти ответ о том, как показывать только текущие отзывы пользователей, относящиеся к их сообщениям. Любая помощь будет оценена. Заранее спасибо.

У меня следующие ассоциации:

class User < ApplicationRecord
 has_many :posts
 has_many :reviews, through: :posts
end

class Post < ApplicationRecord
 belongs_to :user
end

class Review < ApplicationRecord
 belongs_to :post
end

В методе индекса контроллера обзоров у меня есть следующий код, который работает хорошо, но он показывает обзоры всем пользователям, поскольку только вошедший в систему пользователь должен иметь возможность видеть все отзывы для определенного сообщения.

def index
 post = Post.friendly.find(params[:post_id])
 @reviews = post.reviews
end

Можно ли использовать оператор if/else в представлении, используя user_id и post_id, и связать это с отзывами, чтобы только владелец публикации мог видеть все связанные обзоры?


person Morez SA    schedule 15.09.2016    source источник


Ответы (1)


Предположим, что в вашей модели обзора есть столбец created_by_id для хранения идентификатора пользователя, создавшего этот обзор.

Попробуйте так

def index
 post = Post.friendly.find(params[:post_id])

 #Write where condition to filter current_user reviews
 @reviews = post.reviews.where(created_by_id: current_user_id)
end
person Charan Kumar Borra    schedule 16.09.2016
comment
У меня проблема в том, что рецензенту не нужно регистрироваться, поэтому в базе данных не будет записи о пользователе, создавшем обзор, мне нужен способ, с помощью которого я могу ссылаться на пользователя, создавшего сообщение с отзывами, принадлежащими на тот пост. Поэтому, если current_user является создателем поста, он должен иметь возможность видеть все отзывы, созданные для его поста. - person Morez SA; 20.09.2016