activerecord:不使用事务更新对象属性

时间:2012-06-01 13:38:57

标签: mysql ruby-on-rails activerecord transactions

这是我的代码:

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

哪个是自我解释。

问题是:我需要能够通过简单的mysql查询更新没有事务的对象属性。如何使用activerecord实现这一目标?

2 个答案:

答案 0 :(得分:0)

也许您正在寻找update-column

  

更新对象的单个属性,而不调用save

     
      
  • 跳过验证。
  •   
  • 跳过回调。
  •   如果该列可用,则
  • updated_at / updated_on列不会更新。
  •   

答案 1 :(得分:0)

update_attributes使用了一个交易,但奇怪的是,save没有,所以如果您想要回调以及所有没有交易的爵士乐,您可以这样做:

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

在幕后,update_attributes实际上只是调用attributes=然后调用save