创建索引前的回调
Callback before create index
在我的工作流程中,我创建了一个唯一索引并结合了我的 Invoices (:company_id, :forwarder_id, :forwarder_reference)
的三列。我想 运行 在保存与我的元素关联的索引之前进行回调以避免 AR 错误。
我的代码:
validate :forwarder_reference_uniqness
def forwarder_reference_uniqness
dup_invoices = Invoice.where(
company_id: company_id,
forwarder_id: forwarder_id,
forwarder_reference: forwarder_reference
)
errors.add(:forwarder_reference, :uniqueness) if dup_invoices && dup_invoices.where.not(id: id).any?
end
当验证方法生成错误时,我仍然遇到索引唯一性错误
我的错误:
Mysql2::Error: Duplicate entry '61-9514-12345' for key
'uniq_forwarder_ref_on_forwarder_invoices' excluded from capture: DSN
not set
ActiveRecord::RecordNotUnique (Mysql2::Error: Duplicate entry
'61-9514-12345' for key 'uniq_forwarder_ref_on_forwarder_invoices'):
那么您知道在生成验证错误时停止进程的方法吗?
也许像这样使用 Rails uniqueness
验证和 scope
?
# in app/models/invoice.rb
validate :forwarder_reference, uniqueness: { scope: %i[company_id forwarder_id] }
在我的工作流程中,我创建了一个唯一索引并结合了我的 Invoices (:company_id, :forwarder_id, :forwarder_reference)
的三列。我想 运行 在保存与我的元素关联的索引之前进行回调以避免 AR 错误。
我的代码:
validate :forwarder_reference_uniqness
def forwarder_reference_uniqness
dup_invoices = Invoice.where(
company_id: company_id,
forwarder_id: forwarder_id,
forwarder_reference: forwarder_reference
)
errors.add(:forwarder_reference, :uniqueness) if dup_invoices && dup_invoices.where.not(id: id).any?
end
当验证方法生成错误时,我仍然遇到索引唯一性错误
我的错误:
Mysql2::Error: Duplicate entry '61-9514-12345' for key
'uniq_forwarder_ref_on_forwarder_invoices' excluded from capture: DSN
not set
ActiveRecord::RecordNotUnique (Mysql2::Error: Duplicate entry
'61-9514-12345' for key 'uniq_forwarder_ref_on_forwarder_invoices'):
那么您知道在生成验证错误时停止进程的方法吗?
也许像这样使用 Rails uniqueness
验证和 scope
?
# in app/models/invoice.rb
validate :forwarder_reference, uniqueness: { scope: %i[company_id forwarder_id] }