我有一个STI模型,其中每个子类使用不同的验证。 Rails默认会在运行时运行原始类型的验证,所以我试图用“变成”来强制新类型的验证。单表继承和更改类型不会保存
我的代码如下所示:
payment_processor = PaymentProcessor.where(:account_id => self.id).first_or_initialize
new_gateway = "PaymentProcessors::#{gateway_type.classify}".constantize
payment_processor = payment_processor.becomes(new_gateway)
payment_processor.type = new_gateway
payment_processor.assign_attributes(attributes)
payment_processor.save!
但是,它不会保存,因为MySQL的生成过程中保存正在寻找新的类型。因此,举例来说,如果我最初gateway_type是“AuthorizeNet”,我更改为“贝宝”,MySQL的是:
UPDATE `payment_processors` SET `type` = 'PaymentProcessors::PayPal', `updated_at` = '2015-11-07 11:53:53' WHERE `payment_processors`.`type` IN ('PaymentProcessors::PayPal') AND `payment_processors`.`id` = 232
但要寻找原始类型,Auth.net是这样的:
UPDATE `payment_processors` SET `type` = 'PaymentProcessors::PayPal', `updated_at` = '2015-11-07 11:53:53' WHERE `payment_processors`.`type` IN ('PaymentProcessors::AuthorizeNet') AND `payment_processors`.`id` = 232
有关如何跳过“where子句”以仅由payment_processor ID更新的任何想法?