我确定我只是遗漏了一些简单的东西,但过去几天一直在绞尽脑汁。
我有一个预订和评论表,其中预订有很多评论。我可以创建Review,但在尝试定义离开和接收审阅的用户的角色时会遇到错误。
这是我的模特。评论
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和no dice。
我知道这没有运行,因为在检查时,review_receiver_id被留空了。
我也可以通过review.booking.talent_id和review.booking.client_id访问这些信息,因此连接就在那里。我知道我必须遗漏一些但不知道是什么。
答案 0 :(得分:0)
运行您的方法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
类的属性。
您也无法在此方法结束时调用save
或update
,因为您使用before_save
回调来调用它。方法save
和update
再次触发它,方法将再次被调用,并创建无限循环。