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

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 閱讀(712) 評論(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>
            狼人天天伊人久久| 国产欧美一区二区精品忘忧草| 亚洲欧洲一区二区三区在线观看| 久久超碰97人人做人人爱| 亚洲欧美区自拍先锋| 亚洲欧美日韩国产综合| 国产精品久久久久久久久果冻传媒 | 国产欧美亚洲一区| 亚洲国产欧美在线| 欧美另类亚洲| 国产精品99久久久久久有的能看| 久久精品动漫| 妖精成人www高清在线观看| 在线日韩欧美视频| 亚洲国产一区二区在线| 亚洲国产高清视频| 国产日韩精品久久久| 亚洲一二三四区| 亚洲一区二区三区免费在线观看| 午夜精品久久久久久久| 久久精品人人爽| 欧美日本精品在线| 亚洲美女毛片| 久久久久一区二区三区| 亚洲激情视频网站| 亚洲制服av| 欧美精品一区二区三区很污很色的 | 久久精品视频在线观看| 亚洲福利在线观看| 午夜精品亚洲| 欧美精品在线免费观看| 国产综合色产| 亚洲一区一卡| 亚洲第一视频网站| 欧美影视一区| 日韩午夜av电影| 久热国产精品| 国模一区二区三区| 欧美在线在线| 亚洲视频日本| 久久蜜臀精品av| 亚洲一区在线视频| 欧美成年人视频网站| 欧美一区二区国产| 国产乱码精品一区二区三区忘忧草| 亚洲天堂av图片| 午夜精品久久久久久久99热浪潮| 午夜精品一区二区三区电影天堂| 亚洲欧美中文字幕| 国产伦精品一区二区三区免费迷| 亚洲美女黄色| 美国十次成人| 一区二区三区自拍| 欧美大片一区| 老司机精品视频网站| 国产精品色一区二区三区| 久久久精品久久久久| 国产精品夜夜夜一区二区三区尤| 亚洲美女在线一区| 91久久精品视频| 久久影院午夜论| 好吊妞这里只有精品| 久久女同互慰一区二区三区| 午夜视频在线观看一区| 国产日韩欧美三区| 久久婷婷人人澡人人喊人人爽| 欧美一区免费视频| 在线观看成人网| 亚洲国产精品第一区二区三区| 亚洲国产精品123| 欧美刺激性大交免费视频| 亚洲精品免费在线| 亚洲欧美日韩一区二区在线| 亚洲网站视频福利| 国产一在线精品一区在线观看| 欧美国产日本韩| 亚洲综合色自拍一区| 美女在线一区二区| 一区二区三区精密机械公司 | 亚洲欧美日韩成人高清在线一区| 一区二区三区高清视频在线观看| 国产精品高潮久久| 久久黄金**| 欧美va亚洲va香蕉在线| 亚洲视频在线观看| 欧美在线播放视频| 亚洲人成精品久久久久| 亚洲香蕉成视频在线观看 | 欧美福利视频网站| 亚洲一区二区视频| 久久精品人人做人人爽电影蜜月| 亚洲国内自拍| 狠狠爱成人网| 亚洲精品在线免费| 午夜久久久久久久久久一区二区| 极品尤物av久久免费看| 日韩视频免费在线观看| 精品av久久久久电影| 日韩视频免费观看| 1024国产精品| 亚洲欧美另类在线| 狠久久av成人天堂| 一区二区三区 在线观看视| 国户精品久久久久久久久久久不卡| 欧美成人网在线| 国产精品一区视频| 日韩视频中文字幕| 亚洲国语精品自产拍在线观看| 欧美一区日韩一区| 欧美日韩精品在线观看| 女仆av观看一区| 国产一二精品视频| 亚洲男人影院| 亚洲欧美日韩精品久久久| 欧美激情免费观看| 亚洲一区二区三区在线观看视频 | 久久精品国产第一区二区三区| 欧美金8天国| 欧美激情麻豆| 亚洲高清不卡在线| 久久精品国产v日韩v亚洲| 亚洲免费在线视频| 国产精品观看| 亚洲理论电影网| 99视频有精品| 欧美欧美天天天天操| 亚洲高清精品中出| 亚洲国产91| 91久久极品少妇xxxxⅹ软件| 精品成人免费| 亚洲欧美在线看| 久久综合一区| 99国产精品国产精品久久| 亚洲精品一二三| 欧美一区二区在线看| 99热精品在线| 欧美精品三区| 亚洲日本成人女熟在线观看| 亚洲三级影片| 欧美精品在线看| 一本色道久久综合狠狠躁篇的优点| av成人天堂| 国产精品毛片a∨一区二区三区|国| 亚洲视频一区在线| 久久电影一区| 亚洲第一精品夜夜躁人人躁| 久久亚洲精品伦理| 亚洲韩日在线| 亚洲一区二区三区激情| 国产精品美女午夜av| 欧美一级免费视频| 亚洲高清av| 国产区二精品视| 欧美制服丝袜| 亚洲国产婷婷| 午夜精品福利在线观看| 国产视频在线观看一区| 老司机一区二区三区| 亚洲乱码国产乱码精品精98午夜| 亚洲一区尤物| 另类春色校园亚洲| 国产亚洲欧洲| 欧美激情一区二区三区蜜桃视频| 最新国产成人在线观看| 亚洲免费在线看| 亚洲第一区在线| 欧美日韩午夜在线| 欧美专区一区二区三区| 亚洲国产一区在线| 欧美影院精品一区| 亚洲精品日本| 国产欧美日韩亚洲| 欧美高清在线视频| 国产视频一区二区在线观看| 久久一区二区精品| 亚洲午夜久久久久久尤物| 国内精品一区二区| 欧美日韩综合在线免费观看| 巨乳诱惑日韩免费av| 99精品国产高清一区二区| 国产一区二区三区久久| 欧美日韩成人免费| 开元免费观看欧美电视剧网站| 亚洲一区成人| 亚洲欧洲一区二区在线播放| 久久精品理论片| 亚洲高清在线精品| 性欧美videos另类喷潮| 亚洲人成绝费网站色www| 国产午夜精品久久久久久久| 欧美日韩免费在线观看| 免费观看国产成人| 久久久久国产精品一区三寸| 亚洲午夜av在线| 亚洲精品久久7777| 欧美黄色成人网| 欧美xxxx在线观看| 久久久青草婷婷精品综合日韩| 亚洲男人的天堂在线观看| 99re热这里只有精品视频|