我有一個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更新的任何想法?