attributes_with_quotes函數(shù)的參數(shù)搞這么復雜,原因是我想即便是用這段代碼替換庫里面的部分,也不影響原有代碼的正常功能。
可以簡單測試一下上面的例子,它生成的SQL語句會簡潔很多,大概是這樣子:
UPDATE orders SET "status" = 'finished' WHERE id = 1
已發(fā)現(xiàn)的BUG和修復:
1、沒有調用validation (by cookoo)。由于原有代碼調用save,而save被覆蓋成有驗證的代碼,所以具有驗證功能。解決辦法是增加一段代碼:
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
簡單測試通過。