gpt4 book ai didi

ruby-on-rails - before_save 期间的方法错误

转载 作者:行者123 更新时间:2023-11-29 13:57:02 24 4
gpt4 key购买 nike

我确定我只是遗漏了一些简单的东西,但过去几天我一直在为此绞尽脑汁。

我有一个预订和评论表,其中预订有很多评论。我可以创建评论,但在尝试定义离开和接收评论的用户角色时遇到错误。

这是我的模型。评论

class Review < ActiveRecord::Base
before_save :define_review_role
after_create :call_update_rating

belongs_to :booking

belongs_to :client, class_name: "User", primary_key: "client_id"
belongs_to :talent, class_name: "User", primary_key: "talent_id"

def define_review_role
if review_sender_id === self.booking.client_id
review_receiver_id = self.booking.talent_id
else
review_receiver_id = self.booking.client_id
end
self.update
end

def call_update_rating
user = User.find(self.review_receiver_id)
if review_receiver_id == self.booking.talent_id
user.update_talent_rating(self.rating)
else
user.update_client_rating(self.rating)
end
user.save
end
end

和预订模型

class Booking < ActiveRecord::Base
# Start Validations
validates :amount, format: {with: /(\d{1,3})(\.\d{1,2})?/, :message => "field is invalid. Please enter a correct amount."}

belongs_to :user

belongs_to :client, class_name: "User", primary_key: "client_id"
belongs_to :talent, class_name: "User", primary_key: "talent_id"

has_many :reviews

has_many :sent_reviews, class_name: "Review", primary_key: "talent_id"
has_many :received_reviews, class_name: "Review", primary_key: "client_id"

def client
User.find(client_id)
end

def talent
User.find(talent_id)
end
end

我已经能够很好地创建评论,经过检查我发现 review.review_receiver_id 留空了。由于某种原因,define_review_role 没有运行,我尝试了 before_create、after_save、after_create 和没有骰子。

我知道这没有运行,因为经检查,review_receiver_id 留空。

我还可以通过 review.booking.talent_id 和 review.booking.client_id 访问信息,所以连接就在那里。我知道我一定错过了什么,但不知道是什么。

最佳答案

您的方法 define_review_role 正在运行,您只编写了糟糕的代码。它应该看起来像这样

def define_review_role
if review_sender_id === self.booking.client_id
self.review_receiver_id = self.booking.talent_id
else
self.review_receiver_id = self.booking.client_id
end
end

如果您尝试在没有self 的情况下赋值,则该值将赋给新创建的本地方法,而不是您的Report 类的属性。

您也不能在此方法的末尾调用 saveupdate,因为您正在使用 before_save 回调调用它。方法 saveupdate 再次触发它,方法将再次被调用,你创建无限循环。

关于ruby-on-rails - before_save 期间的方法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29802672/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com