2012-06-01 84 views
0

這裏更新對象屬性是我的代碼:ActiveRecord的:不使用交易

class UserTopicVisit < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :topic 

    def self.log_last_user_topic_visit(user_id, topic_id) 
    visit = UserTopicVisit.find_or_create_by_user_id_and_topic_id(user_id, topic_id) 
    visit.update_attributes!(:last_visit => Time.now.to_formatted_s(:db)) 
    end 
end 

這是自explainig。

問題是:我需要能夠通過簡單的mysql查詢來更新沒有事務的對象屬性。我怎樣才能使用activerecord來完成?

+0

我不明白,如果你不想交易,你可以在每次查詢後作出「提交」或將表引擎更改爲MyISAM – jcho360

+0

我想擁有INNODB引擎,但我不需要事務處理那個單獨的案例,只是簡單的更新查詢就足夠了。 – user973254

+0

嘗試編寫「提交」;在每個查詢之後足以保存更改 – jcho360

回答

0

也許你正在尋找update-column

更新對象的單一屬性,而無需調用保存

  • 驗證被跳過。
  • 回調被跳過。
  • 如果該列可用,updated_at/updated_on列不會更新。
+0

謝謝,這正是我需要的。 – user973254

0

update_attributes使用事務,但奇怪的是,save沒有,所以如果你想回調和沒有交易的所有的爵士樂,你可以這樣做:

visit.last_visit = Time.now.to_formatted_s(:db) 
visit.save! 

引擎蓋下,update_attributes實際上只需撥打attributes=,然後撥打save即可。