0

导轨 3.2。我正在使用以下代码关联user_id到记录:

  # review.rb
  class Review < ActiveRecord::Base
    belongs_to :reviewable, :polymorphic => true, :counter_cache => true
  end

  # reviews_controller.rb
  def create
    @review = @reviewable.reviews.new(params[:review])
    @review.user_id = current_user.id
    if @review.save
      flash[:success] = 'Thanks for adding your review.'
      redirect_to @reviewable
    else
      flash[:error] = 'Error adding review,  please try again.'
      redirect_to @reviewable
    end
  end

我想找到一种使用它的方法,但它一直说current_user未定义,但我可以找到current_user对象:

  def create
    @review = @reviewable.current_user.reviews.create(params[:review]
    if @review.save
      flash[:success] = 'Thanks for adding your review.'
      redirect_to @reviewable
    else
      flash[:error] = 'Error adding review,  please try again.'
      redirect_to @reviewable
    end
  end
4

2 回答 2

2

如果您可以将代码发布到 @reviewable 对象,它可能有助于给出更具体的答案。但是,如果你想要一个班轮,你可以这样做:

@review = @reviewable.reviews.build(params[:review].merge({:user_id => current_user.id})

但就个人而言,我认为您的原件看起来更好,因为它更容易阅读。

作为附加说明,您的第二个示例还调用了创建和保存。您不需要同时调用两者,因为 create 在接受参数散列时保存对象。如果您想初始化一个对象,以某种方式对其进行修改,然后稍后保存,则保存非常好用。

于 2013-01-28T16:20:27.387 回答
0

我认为这不起作用的原因是因为current_user是一种未在可审查中定义的方法。

可评论可能属于用户,在这种情况下@reviewable.user.reviews.create...可能是有效的。

于 2013-01-28T16:18:14.720 回答