【发布时间】:2016-01-04 22:32:36
【问题描述】:
我有一个标准的 has_many belongs_to 关联。现在我想销毁Organization 模型中的记录并保留Transaction 记录。但这是不允许的:organization_id 在Transaction 模型中将是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