Rails:预期的记录,在回调上关联记录时after_create false

Rails: record expected, got false when associating record on after_create callback

提问人:wachichornia 提问时间:6/2/2022 更新时间:6/2/2022 访问量:28

问:

我在预订模型上有以下内容

belongs_to :tour, optional: true

after_create_commit :add_to_tour

  def add_to_tour
    tour = Tour.where(experience: experience, time: time).first_or_create
    tour.bookings <<! self
  end

(在调试中添加了 bangs)。然后我在方法上有这段代码:

  booking = Booking.home_guide.where(pipedrive_deal_id: params['id']).first_or_initialize

    if booking.update!(
        some params
      )

此代码失败,并出现以下错误

ActiveRecord::AssociationTypeMismatch (Booking(#71120) expected, got false which is an instance of FalseClass(#5700))

booking在db上提交,否则回调不会触发。为什么我得到假?我必须以某种方式重新加载预订吗?

谢谢

Ruby-on-Rails Ruby 回调

评论


答:

2赞 mechnicov 6/2/2022 #1
array = []
array <<! 'Some object'
# => [false]

因为

!'Some object'
# => false

!不是调试。它是“非”运算符

评论

0赞 spickermann 6/2/2022
其他上下文:同时存在方法和方法,如果更新不成功,则带有方法的方法将引发异常。但只有.命名的方法根本没有在 ActiveRecord 关联上定义,而是 Ruby 将其解释为updateupdate!!<<<<!tour.bookings << !self
0赞 wachichornia 6/2/2022
明白了。那是我的错。