【问题标题】:How to destroy a record while a record in another model is associated to it?当另一个模型中的记录与之关联时,如何销毁记录?
【发布时间】:2016-01-04 22:32:36
【问题描述】:

我有一个标准的 has_many belongs_to 关联。现在我想销毁Organization 模型中的记录并保留Transaction 记录。但这是不允许的:organization_idTransaction 模型中将是nil

如何在保留交易记录的同时销毁组织记录?

组织模式:

has_many   :transactions, inverse_of: :organization

交易模型:

belongs_to :organization, inverse_of: :transactions

事务迁移文件:

t.references  :organization,  foreign_key: true

【问题讨论】:

  • 当你说不允许的时候,谁不允许呢?验证?您能否提供一个尝试破坏时遇到的错误示例。通常AFAIK你可以摧毁父母,孩子不会被摧毁,除非你明确指定该行为
  • 我收到以下错误:ActiveRecord::InvalidForeignKey: PG::ForeignKeyViolation: ERROR: update or delete on table "organizations" violates foreign key constraint "fk_rails_6807b11179" on table "transactions" DETAIL: Key (id)=(21) is still referenced from table "transactions".。我在 Transaction 模型中没有验证。
  • 也许是保留transaction 记录但删除记录的organization_id 值的问题?也许我不应该使用@organization.destroy 进行销毁,而是使用自动删除连接的方式?
  • 你能用普通的id代替引用吗?对不起,我错过了。
  • 问题是我真的使用参考。如果在销毁之前我先这样做,我现在确实可以使用它:if @organization.transactions.any?@organization.transactions.each do |transaction| ; transaction.update_columns(organization_id: nil) ; end ; end。但我不确定这是否是合适的方式......

标签: ruby-on-rails ruby ruby-on-rails-4 associations


【解决方案1】:

从迁移文件中删除 foreign_key 约束:

t.references  :organization,  foreign_key: true

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-22
    • 1970-01-01
    • 1970-01-01
    • 2019-09-23
    • 2015-03-16
    • 2017-11-05
    • 1970-01-01
    相关资源
    最近更新 更多