簡體   English   中英

多態模型用戶關聯

[英]Polymorphic model user association

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

如果您可以將代碼發布到@reviewable對象的內容,則可能有助於提供更具體的答案。 但如果你想要一個襯墊,你可以這樣做:

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

但就個人而言,我認為你的原版看起來更好,因為它更容易閱讀。

作為補充說明,您的第二個示例也稱為創建和保存。 您不需要同時調用它們,因為create在接受參數哈希時會保存對象。 如果要初始化對象,以某種方式修改它,然后稍后保存,則可以使用保存。

我認為這不起作用的原因是因為current_user是一個未在可審閱的上定義的方法。

可審閱者可能屬於用戶,在這種情況下, @reviewable.user.reviews.create...可能有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM