attributes_with_quotes函數(shù)的參數(shù)搞這么復(fù)雜,原因是我想即便是用這段代碼替換庫(kù)里面的部分,也不影響原有代碼的正常功能。
可以簡(jiǎn)單測(cè)試一下上面的例子,它生成的SQL語(yǔ)句會(huì)簡(jiǎn)潔很多,大概是這樣子:
UPDATE orders SET "status" = 'finished' WHERE id = 1
已發(fā)現(xiàn)的BUG和修復(fù):
1、沒(méi)有調(diào)用validation (by cookoo)。由于原有代碼調(diào)用save,而save被覆蓋成有驗(yàn)證的代碼,所以具有驗(yàn)證功能。解決辦法是增加一段代碼:
module?ActiveRecord
??module?ValidationsFix
????
def
?self.append_features(base)?
#
?:nodoc:
??????super
??????base.class_eval?do
????????alias_method?:update_attributes_without_validation,?:update_attributes
????????alias_method?:update_attributes,?:update_attributes_with_validation
??????end
????end
????
def
?update_attributes_with_validation(new_attributes)
??????
return
?
if
?new_attributes.nil?
????? attributes = new_attributes.dup
????? attributes.stringify_keys!
??????self.attributes?
=
?attributes
??????
if
?valid?
????????update_attributes_without_validation(attributes)
??????
else
????????
return
?false
??????end
????end
??end
end
ActiveRecord::Base.class_eval?do
??include?ActiveRecord::ValidationsFix
end
簡(jiǎn)單測(cè)試通過(guò)。