青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

qiezi的學習園地

AS/C/C++/D/Java/JS/Python/Ruby

  C++博客 :: 首頁 :: 新隨筆 ::  ::  :: 管理 ::
這是前段時間有人討論過的問題:
代碼:

order = Order.find(1)
order.update_attribute(:status, 'finished')

假定orders表有10個字段,你只想更新其中一個,但active record會生成一個更新全部字段的SQL語句,假定其中一個字段值長度是20K,這個負擔可能會有些重。

我嘗試解決這個問題,寫了個簡單的插件:
代碼:

module ActiveRecord
? class Base
? ? def update_attribute(name, value)
? ? ? update_attributes(name => value)
? ? end

? ? def update_attributes(new_attributes)
? ? ? return if new_attributes.nil?
? ? ? attributes = new_attributes.dup
? ? ? attributes.stringify_keys!
? ? ? self.attributes = attributes
? ? ? update(attributes)
? ? end

? ? private
? ? ? def update(attrs = nil)
? ? ? ? connection.update(
? ? ? ? ? "UPDATE #{self.class.table_name} " +
? ? ? ? ? "SET #{quoted_comma_pair_list(connection, attributes_with_quotes(false, attrs))} " +
? ? ? ? ? "WHERE #{self.class.primary_key} = #{quote(id)}",
? ? ? ? ? "#{self.class.name} Update"
? ? ? ? )
? ? ? ?
? ? ? ? return true
? ? ? end

? ? ? def attributes_with_quotes(include_primary_key = true, attrs = nil)
? ? ? ? (attrs || attributes).inject({}) do |quoted, (name, value)|
? ? ? ? ? if column = column_for_attribute(name)
? ? ? ? ? ? quoted[name] = quote(value, column) unless !include_primary_key && column.primary
? ? ? ? ? end
? ? ? ? ? quoted
? ? ? ? end
? ? ? end
? end
end


attributes_with_quotes函數的參數搞這么復雜,原因是我想即便是用這段代碼替換庫里面的部分,也不影響原有代碼的正常功能。

可以簡單測試一下上面的例子,它生成的SQL語句會簡潔很多,大概是這樣子:
UPDATE orders SET "status" = 'finished' WHERE id = 1

已發現的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

簡單測試通過。

posted on 2006-08-26 02:10 qiezi 閱讀(723) 評論(0)  編輯 收藏 引用 所屬分類: Ruby
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美国产精品一区| 亚洲高清精品中出| 日韩手机在线导航| 欧美日韩在线高清| 亚洲在线视频网站| 亚洲男人av电影| 国户精品久久久久久久久久久不卡| 久久久www免费人成黑人精品| 欧美在线91| 亚洲欧洲日韩在线| 亚洲作爱视频| 狠狠久久五月精品中文字幕| 欧美激情精品久久久久久大尺度| 欧美电影在线观看| 亚洲欧美自拍偷拍| 久久久噜噜噜| 亚洲无线一线二线三线区别av| 亚洲综合色自拍一区| 在线观看成人一级片| 亚洲人在线视频| 国产日韩在线一区| 亚洲国产精品成人va在线观看| 欧美午夜欧美| 欧美黄色一区二区| 国产精品高潮呻吟久久av无限| 久久久人人人| 欧美午夜精品伦理| 男人的天堂成人在线| 欧美亚一区二区| 免费成人高清视频| 国产精品久久久久久久久免费| 蜜桃视频一区| 国产老女人精品毛片久久| 亚洲福利视频一区| 国产伊人精品| 中国日韩欧美久久久久久久久| 亚洲电影免费在线观看| 午夜精品福利在线| 亚洲小说春色综合另类电影| 久久综合久久美利坚合众国| 午夜日韩av| 欧美日韩一区综合| 亚洲国产美国国产综合一区二区| 国产亚洲综合在线| 亚洲一区二区三区四区中文| 99re66热这里只有精品3直播| 久久久久久久999| 欧美有码视频| 国产精品亚洲综合一区在线观看| 亚洲人屁股眼子交8| 亚洲国产综合视频在线观看| 久久精品国产69国产精品亚洲| 亚洲免费中文| 欧美视频精品在线| 日韩午夜激情av| 亚洲美女视频在线观看| 久久亚洲视频| 免费一级欧美在线大片| 在线电影院国产精品| 欧美一区免费视频| 久久九九热re6这里有精品 | 欧美国产一区二区| 激情丁香综合| 久久久爽爽爽美女图片| 麻豆91精品| 亚洲国产精品一区二区久| 久久婷婷国产麻豆91天堂| 久热精品视频在线观看| 樱桃成人精品视频在线播放| 久久久久久久久一区二区| 免费美女久久99| 亚洲国产激情| 欧美日本国产在线| 艳女tv在线观看国产一区| 午夜精品久久久久久久白皮肤| 国产精品麻豆va在线播放| 亚洲欧美中文另类| 久久五月婷婷丁香社区| 亚洲国产精品久久久久久女王| 免费成人高清| aa日韩免费精品视频一| 欧美一区二区三区在线观看| 国产亚洲欧美日韩美女| 久久亚洲精品欧美| 亚洲裸体俱乐部裸体舞表演av| 亚洲一区二区三区四区中文| 国产精品视频免费观看| 久久精品日产第一区二区三区| 欧美h视频在线| 国产精品99久久久久久久女警| 国产精品国产三级国产aⅴ9色| 欧美一区二区免费观在线| 美日韩精品视频免费看| 在线视频精品| 国产亚洲一区二区在线观看 | 久久精品卡一| 亚洲精品1234| 欧美一区2区三区4区公司二百| 在线成人激情视频| 欧美三级网址| 久久精品免费| 在线视频精品一区| 免费亚洲一区二区| 亚洲欧美日韩爽爽影院| 在线观看日韩av电影| 欧美午夜电影一区| 美女爽到呻吟久久久久| 亚洲伊人久久综合| 欧美激情第10页| 久久精品国产清高在天天线| 亚洲乱码视频| 在线观看日韩| 国产美女精品人人做人人爽| 欧美精品成人在线| 欧美亚洲专区| 宅男66日本亚洲欧美视频| 欧美国产在线视频| 久久精品电影| 亚洲女女女同性video| 最新精品在线| 激情综合在线| 国产亚洲精品一区二555| 欧美三级电影大全| 欧美另类女人| 女人色偷偷aa久久天堂| 久久精品91| 欧美一级理论片| 亚洲自拍偷拍福利| 亚洲四色影视在线观看| 一本大道久久a久久精二百| 亚洲高清中文字幕| 亚洲高清在线观看| 亚洲国产成人午夜在线一区| 免费成人激情视频| 免费高清在线视频一区·| 久久久久久久久伊人| 欧美在线免费播放| 久久本道综合色狠狠五月| 亚洲欧美国产精品桃花| 亚洲综合国产| 亚洲男人的天堂在线观看| 亚洲一区二区视频在线| 亚洲视频一二| 亚洲欧美国产制服动漫| 新狼窝色av性久久久久久| 欧美亚洲一区| 欧美一区二区三区婷婷月色| 欧美在线观看日本一区| 久久国产一区二区| 六月婷婷一区| 欧美成人在线免费视频| 亚洲第一黄网| 日韩一区二区精品葵司在线| 一区二区冒白浆视频| 亚洲一区二区少妇| 欧美一区二视频| 久久久久免费| 欧美国产综合| 国产精品成人一区二区三区夜夜夜 | 亚洲人精品午夜| 99亚洲一区二区| 亚洲欧美日韩精品久久| 久久久久**毛片大全| 麻豆精品视频在线观看| 欧美日韩久久精品| 国产精品日日做人人爱| 精品不卡一区| 在线一区二区三区做爰视频网站| 亚洲在线不卡| 久久综合色婷婷| 亚洲剧情一区二区| 性色av一区二区三区在线观看| 久久亚洲精品网站| 欧美日韩一区二区三区在线看| 国产精品亚洲综合一区在线观看| 尤物精品国产第一福利三区| 一二美女精品欧洲| 久久精品水蜜桃av综合天堂| 亚洲国产精品综合| 欧美亚洲免费高清在线观看| 欧美成人精品1314www| 国产精品视频999| 91久久精品久久国产性色也91| 亚洲一区二区在线观看视频| 蜜臀va亚洲va欧美va天堂 | 欧美亚洲在线视频| 欧美高清你懂得| 国产欧美日韩视频一区二区三区 | 欧美激情女人20p| 国产精品视频第一区| 91久久线看在观草草青青| 久久都是精品| 亚洲免费观看视频| 久久综合色88| 国产亚洲网站| 欧美一级视频免费在线观看| 最新69国产成人精品视频免费| 久久aⅴ国产紧身牛仔裤| 国产精品久久波多野结衣| 日韩一区二区免费高清|