Rails 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
答案 0 :(得分:2)
如果您可以将代码发布到@reviewable对象的内容,则可能有助于提供更具体的答案。但是如果你想要一个衬垫,你可以这样做:
@review = @reviewable.reviews.build(params[:review].merge({:user_id => current_user.id})
但就个人而言,我觉得你的原创看起来更好,因为它更容易阅读。
作为补充说明,您的第二个示例还调用了create和save。您不需要同时调用它们,因为create在接受参数哈希时会保存对象。如果你想初始化一个对象,以某种方式修改它,然后再保存它,那么保存很好用。
答案 1 :(得分:0)
我认为这不起作用的原因是因为current_user
是一种未在可审核上定义的方法。
可审核对象可能属于用户,在这种情况下@reviewable.user.reviews.create...
可能有效。