Ruby on rails Rails ActiveRecord电铲操作员(<;<;)更新不';I don’我不会在日志中无一例外地成功

Ruby on rails Rails ActiveRecord电铲操作员(<;<;)更新不';I don’我不会在日志中无一例外地成功,ruby-on-rails,postgresql,activerecord,Ruby On Rails,Postgresql,Activerecord,我的数据模型包含可能包含附件的会议。我的update_meeting API包含以下行(以及其他行): 我的假设(在看到这一点之前)是,如果有一个UPDATE语句,后跟一个COMMIT,而没有回滚或错误消息,或者日志中没有任何内容,那么它应该已经成功了。但显然不是 有没有人能指出哪里出了问题?我现在完全不知道从哪里开始找。不确定如何复制,不确定要添加哪些日志消息以使下次发生时更容易,不确定 我使用的是运行在EC2上的Rails 5和PostgreSQL。让会议创建附件 begin attac

我的数据模型包含可能包含附件的会议。我的update_meeting API包含以下行(以及其他行):

我的假设(在看到这一点之前)是,如果有一个UPDATE语句,后跟一个COMMIT,而没有回滚或错误消息,或者日志中没有任何内容,那么它应该已经成功了。但显然不是

有没有人能指出哪里出了问题?我现在完全不知道从哪里开始找。不确定如何复制,不确定要添加哪些日志消息以使下次发生时更容易,不确定


我使用的是运行在EC2上的Rails 5和PostgreSQL。

让会议创建附件

begin
  attachment = @meeting.attachments.create(image: params[:attachment], user: current_user)
  NotificationManager.add_attachment_to_meeting(current_user, @meeting, attachment)
rescue
  puts "Error occured trying to upload attachment: #{attachment.inspect}, #{attachment.errors.inspect}"
end

会议应该像附件的“聚合器”。附件不应该存在,或者至少在没有会议的情况下没有意义,因此应该通过会议创建附件

,这听起来是个不错的建议。但有一个问题:你知道为什么上述案例没有任何错误的痕迹就失败了吗?如果上述操作失败,那么在这种情况下,您的实现将如何运行?很可能是因为您的方法
add_attachment_to_meeting
正在以静默方式失败,而不是引发异常。无论如何,正确的方法是在会议中创建附件,这样你就不必关心如何连接这两个问题了,也许还有一个问题,现在我们正在看这些代码行:你会使用“create”还是“create!”?我更喜欢使用
create所以Rails在出现故障时非常响亮,我可以捕获异常并正确处理它是的,这就是我所期望的。好的,谢谢你!
(0.7ms)  BEGIN
SQL (1.0ms)  UPDATE "attachments" SET "updated_at" = $1, "meeting_id" = $2 WHERE "attachments"."id" = $3  [["updated_at", 2018-07-06 13:57:52 UTC], ["meeting_id", 434], ["id", 51]]
(1.3ms)  COMMIT
begin
  attachment = @meeting.attachments.create(image: params[:attachment], user: current_user)
  NotificationManager.add_attachment_to_meeting(current_user, @meeting, attachment)
rescue
  puts "Error occured trying to upload attachment: #{attachment.inspect}, #{attachment.errors.inspect}"
end