一次在两个范围内创建审核

时间:2015-09-16 19:09:12

标签: ruby-on-rails ruby ruby-on-rails-4

我有两种类型的用户,一种可以创建电影,另一种可以创建评论:

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

我已经被困在这个问题上几个小时了,非常感谢我能帮助我解决这个问题,谢谢!

1 个答案:

答案 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