使用丢弃 gem 软删除 has_and_belongs_to_many 关联
Soft Delete has_and_belongs_to_many association using discard gem
使用丢弃 Gem软删除has_and_belongs_to_many关联的最佳方法是什么。
通过此关联,数据库中有一个连接 table,但在 Rails 模型上没有实际的 Ruby。
我将尝试通过一个例子来解释,假设有 2 个模型:
class Participant < ApplicationRecord
has_and_belongs_to_many :company_employees
end
class CompanyEmployee < ApplicationRecord
has_and_belongs_to_many :participants
end
This will create company_employees_participants middle/join table in database BUT without any model in Ruby on Rails. Where i can make settings for discard gem ?
知道如何解决我们需要在加入的 table 中使用 has_and_belongs_to_many assocaition 在丢弃 gem 中进行软删除的需求吗?
丢弃 gem: https://github.com/jhawthorn/discard
我正在使用
ruby 2.5.3,Rails 5.1.6,丢弃(1.0.0)
我认为没有任何 gem 可以软删除 has_and_belongs_to_many
关系。最好的前进方式可能是重构您的关系并使用 has_many :through
使其明确。这允许您自定义关系,例如软删除。更改非常简单:
- 创建迁移以重命名连接 table。
- 创建一个新模型并匹配 table 的名称。
- 将
has_and_belongs_to_many
更改为 has_many :through
。
然后您可以继续按照丢弃的说明启用软删除。
一般来说,我会尽量避免has_and_belongs_to_many
。迟早,我总是不得不自定义连接模型并重构代码。 has_many :through
最初的设置只是稍微多了一些工作,但它在未来会更加灵活,值得付出努力。
你可以看看paranoiagem。 gem 帮助您实现软删除功能。如果你不想使用 gem 那么你可以手动实现它。
如果您想手动集成,更改很简单:
首先,您需要添加迁移以将列deleted_at
添加为datetime
数据字段类型。
然后你可以像paranoia
gem一样编写范围来过滤掉数据,例如with_deleted
您可以在其中查看 deleted_at IS NULL
每当您删除任何记录时,您可以设置 deleted_at
.
我在 Whosebug 上找到了一份参考资料,您可以参考一下 How to use paranoia gem in many to many association
希望对您有所帮助
使用丢弃 Gem软删除has_and_belongs_to_many关联的最佳方法是什么。 通过此关联,数据库中有一个连接 table,但在 Rails 模型上没有实际的 Ruby。
我将尝试通过一个例子来解释,假设有 2 个模型:
class Participant < ApplicationRecord
has_and_belongs_to_many :company_employees
end
class CompanyEmployee < ApplicationRecord
has_and_belongs_to_many :participants
end
This will create company_employees_participants middle/join table in database BUT without any model in Ruby on Rails. Where i can make settings for discard gem ?
知道如何解决我们需要在加入的 table 中使用 has_and_belongs_to_many assocaition 在丢弃 gem 中进行软删除的需求吗?
丢弃 gem: https://github.com/jhawthorn/discard
我正在使用 ruby 2.5.3,Rails 5.1.6,丢弃(1.0.0)
我认为没有任何 gem 可以软删除 has_and_belongs_to_many
关系。最好的前进方式可能是重构您的关系并使用 has_many :through
使其明确。这允许您自定义关系,例如软删除。更改非常简单:
- 创建迁移以重命名连接 table。
- 创建一个新模型并匹配 table 的名称。
- 将
has_and_belongs_to_many
更改为has_many :through
。
然后您可以继续按照丢弃的说明启用软删除。
一般来说,我会尽量避免has_and_belongs_to_many
。迟早,我总是不得不自定义连接模型并重构代码。 has_many :through
最初的设置只是稍微多了一些工作,但它在未来会更加灵活,值得付出努力。
你可以看看paranoiagem。 gem 帮助您实现软删除功能。如果你不想使用 gem 那么你可以手动实现它。
如果您想手动集成,更改很简单:
首先,您需要添加迁移以将列
deleted_at
添加为datetime
数据字段类型。然后你可以像
paranoia
gem一样编写范围来过滤掉数据,例如with_deleted
您可以在其中查看deleted_at IS NULL
每当您删除任何记录时,您可以设置
deleted_at
.
我在 Whosebug 上找到了一份参考资料,您可以参考一下 How to use paranoia gem in many to many association
希望对您有所帮助