【发布时间】:2020-04-11 11:29:21
【问题描述】:
我有一个具有 2 个关联且没有验证的模型,可以创建它,但如果我想销毁它,我会收到错误“ActiveRecord::RecordNotDestroyed” 所以我直接在rails中尝试为这个模型创建新记录,然后运行destroy,但它回滚而没有任何错误消息。如果我真的毁了!我得到了错误。我启用了 mysql 查询日志记录,但它看起来甚至无法删除部分,所以我认为 rails 以某种方式防止破坏这个模型。
作为测试,我创建了没有任何关联的虚拟模型,只有一个字符串值。 Rails 控制台中的相同问题。我必须注意 .delete 方法有效,但 .destroy 无效
然后我开始在我的 rails 应用程序中进行分析(我从某人那里接管了它,所以我仍然不是 100% 熟悉)并在 rails 控制台中尝试销毁不同模型的一些记录,并意识到有些我可以销毁,有些不是。
有什么方法可以找出我无法销毁这些记录的原因吗?如果没有任何验证或关联,我的 Testmodel 真的很奇怪。有什么地方可以查找更多信息吗?我试过这个:
testrecord.destroy; testrecord.errors but in @messages I have empty {}
这是我发现问题的模型代码 (EinvoiceContact) 以及我的测试模型
class EinvoiceContact < ActiveRecord::Base
belongs_to :customer
has_many :building
end
class Customer < ActiveRecord::Base
has_many :einvoice_contacts, dependent: :destroy
accepts_nested_attributes_for :einvoice_contacts, allow_destroy: true, reject_if: :empty_einvoice_contact
end
class Testmodel < ActiveRecord::Base
end
这里是rails和mysql日志的输出
> irb(main):045:0> Testmodel.find(1).destroy\r Testmodel Load (0.4ms)
> SELECT `testmodels`.* FROM `testmodels` WHERE `testmodels`.`id` = 1
> LIMIT 1 (0.1ms) BEGIN (0.1ms) ROLLBACK
> => false
>
>
> 2019-12-18T21:05:42.455378Z 33 Query SELECT `testmodels`.* FROM
> `testmodels` WHERE `testmodels`.`id` = 1 LIMIT 1
> 2019-12-18T21:05:42.456559Z 33 Query BEGIN
> 2019-12-18T21:05:42.458261Z 33 Query ROLLBACK
在哪里可以找到更多详细信息,或者可以在哪里进行设置,我们将不胜感激。这个应用程序使用 CanCan 但我已经设置了
can :manage, :all
Rails 是 4.2.8 和 ruby 2.1.4(我知道它是旧应用程序,我只是接管并维护),mysql 谢谢
【问题讨论】:
-
你有这样的东西吗?模型之外的回调观察者stackoverflow.com/questions/3913811/…
-
你能销毁另一个模型的记录吗(
CustomerEInvoiceContact)?也许您遇到了某种 MySQL 问题,其中删除被禁用。也许这会有所帮助:stackoverflow.com/questions/7948302/…
标签: mysql ruby-on-rails ruby ruby-on-rails-4