我有两种类型的用户,一种可以创建电影,另一种可以创建评论:
class User < ActiveRecord::Base
has_many :created_movies, foreign_key: 'creator_id', class_name: 'Movie'
has_many :reviewed_movies, foreign_key: 'reviewer_id', class_name: 'Review'
end
class Review < ActiveRecord::Base
belongs_to :movie
belongs_to :reviewer, class_name: 'User'
end
class Movie < ActiveRecord::Base
has_many :reviews
belongs_to :creator, class_name: 'User'
end
我想要做的是创建特定评论并立即将reviewer_id设置为current_user。这是我的评论#create:
的代码 def create
@movie = Movie.find(params[:movie_id])
@review = @movie.reviews.merge(current_user.reviewed_movies).create(review_params)
if @review.save
.
.
.
end
这对我来说没有意义,因为我在SessionsHelper中定义了current_user,并且包含了SessionsHelper&#39;在我的应用程序控制器current_user的代码:
def current_user
@current_user ||= User.find_by(id: session[:user_id])
end
我已经被困在这个问题上几个小时了,非常感谢我能帮助我解决这个问题,谢谢!
答案 0 :(得分:1)
以下代码将创建新评论并将其分配给current_user
:
def create
@movie = Movie.find(params[:movie_id])
@review = @movie.reviews.build(review_params)
@review.reviewer = current_user
if @review.save
# ...
end
或者:
def create
@review = Review.new(review_params)
@review.movie = Movie.find(params[:movie_id])
@review.reviewer = current_user
if @review.save
# ...
end