Rails如何在模型上的方法中创建条件

时间:2017-04-19 01:59:27

标签: ruby-on-rails ruby ruby-on-rails-3

我试图让用户可以在反馈模型中反馈反馈方法。但在日志中显示

  

NoMethodError(未定义的方法`total_feedbacks' for nil:NilClass)

如此展示在模型中制作条件?

def feedback_product
  user = User.find_by_id(attributes['user_id'])

  if user
    product.total_feedbacks += 1
    product.average_rating = product.feedbacks.where('buyer_feedback_date IS NOT NULL').rated(Feedback::FROM_BUYERS).average(:buyer_rating)
    product.save
  end
end

反馈 belongs_to :user
和用户
has_many :feedbacks

2 个答案:

答案 0 :(得分:0)

你的问题并不完全清楚。你没有提到这个代码在哪个模型里面,你的情况似乎没问题。

似乎product是零,所以也许你错过了问题中没有提到的东西,比如实例化那个产品。或许你想要你的条件:

if user && product

答案 1 :(得分:0)

问题是此方法假定存在相关模型的现有产品。但是,如果没有创建记录,则产品将为零。

这可以通过几种方式解决,您使用的方法取决于您的用例。

  1. 确保此模型在保存时创建产品,例如通过before_save

    before_save :ensure_product_exists
    def ensure_product_exists
      product ||= Product.create(foo_id: self.id) # replace with correct foreign key
    end
    
  2. 如果产品尚不存在,则使用此方法创建产品,例如

    product ||= Product.new(foo_id: self.id) # replace with correct foreign key
    
  3. 如果产品不存在,则使方法提前返回,例如

    return unless product
    
  4. 除非产品存在,否则
  5. 引发错误

    raise(RuntimeError, "product doesn't exist") unless product