【问题标题】:Active Record in Rails not saving updateRails 中的 Active Record 不保存更新
【发布时间】:2019-09-30 18:08:39
【问题描述】:

我有一个在活动记录中被继承的模块。

在那个模块中 我正在调用一个从外部源获取 id 然后更新记录的函数 我得到更新结果 = true 但记录不会保存更新

# This is shared between multiple instances of classes 
module External
  def get_external_id 
     external_client_id =  ExternalClient::get_id(self)
     # it used to be 
     # self.update_attributes(external_client_id:external_client_id,  external_id_updated_date: Time.now)
     self.external_client_id = external_client_id
     self.external_id_updated_date = Time.now
     self.save
  end
end
class InfomrationForm < ActiveRecord::Base
  include External

end

当我尝试使用 self.external_client_id 我得到空 当我应该从外部服务获取随机 UUID 时。 我检查了整个功能 该服务返回一个正确的 ID,我可以记录它 保存返回true,我可以记录,但是当我尝试使用

问题是我的一个验证在没有提出问题的情况下默默地失败了。

我必须评论所有验证,然后一一返回,以确定哪个验证失败。

【问题讨论】:

  • 如果你在 self.save 后面添加一个 bang(!) 那么它会给你一个更好的错误信息,这样你就可以看到发生了什么。
  • 除了上面的注释,你可以使用self.valid?self.persisted? 来检查是否保存,如果没有保存则打印self.errors
  • 我已经这样做了,但是保存仍然返回true,这意味着记录已成功更新但没有成功。
  • 这可能需要您展示更多代码才能弄清楚。
  • 你确定表backingInformationalFormexternal_client_id方法吗?愚蠢的问题,但值得检查

标签: ruby-on-rails ruby-on-rails-5


【解决方案1】:

验证无声无息地失败,即使它本应抛出错误。

必须注释掉所有验证并一一返回。

这是在验证中 if: Proc.new {} 块 我认为这个问题与我在 Proc.new 中调用一个函数有关 并且该函数调用返回 self.relation 的继承函数 一旦得到固定保存就可以正常工作了

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多