我试图让用户可以在反馈模型中反馈反馈方法。但在日志中显示
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
答案 0 :(得分:0)
你的问题并不完全清楚。你没有提到这个代码在哪个模型里面,你的情况似乎没问题。
似乎product
是零,所以也许你错过了问题中没有提到的东西,比如实例化那个产品。或许你想要你的条件:
if user && product
答案 1 :(得分:0)
问题是此方法假定存在相关模型的现有产品。但是,如果没有创建记录,则产品将为零。
这可以通过几种方式解决,您使用的方法取决于您的用例。
确保此模型在保存时创建产品,例如通过before_save
:
before_save :ensure_product_exists
def ensure_product_exists
product ||= Product.create(foo_id: self.id) # replace with correct foreign key
end
如果产品尚不存在,则使用此方法创建产品,例如
product ||= Product.new(foo_id: self.id) # replace with correct foreign key
如果产品不存在,则使方法提前返回,例如
return unless product
引发错误
raise(RuntimeError, "product doesn't exist") unless product