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})

でも個人的には、原作の方が読みやすいので見栄えがいいと思います。

追加のメモとして、2 番目の例では create と save も呼び出します。create はパラメーターのハッシュを受け入れるときにオブジェクトを保存するため、両方を呼び出す必要はありません。オブジェクトを初期化し、何らかの方法で変更し、後で保存する場合は、Save を使用すると便利です。

于 2013-01-28T16:20:27.387 に答える
0

current_userこれが機能しない理由は、レビュー可能に定義されていないメソッドであるためだと思います。

レビュー可能ユーザーはユーザーに属している可能性があり、その場合@reviewable.user.reviews.create...は有効である可能性があります。

于 2013-01-28T16:18:14.720 に答える