【问题标题】:activerecord: update object attribute without using transactionactiverecord:不使用事务更新对象属性
【发布时间】:2012-06-01 13:38:57
【问题描述】:

这是我的代码:

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 来完成呢?

【问题讨论】:

  • 我不明白,如果您不想要事务,您可以在每次查询后进行“提交”或将表引擎更改为 MyISAM
  • 我想拥有INNODB引擎,但在那种单独的情况下我不需要事务,只需简单的更新查询就足够了。
  • 试着写“commit;”在每个足以保存更改的查询之后

标签: mysql ruby-on-rails activerecord transactions


【解决方案1】:

也许你正在寻找update-column

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

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

【讨论】:

  • 谢谢,这正是我需要的。
【解决方案2】:

update_attributes 使用事务,但奇怪的是,save 没有,所以如果你想要回调和所有没有事务的爵士乐,你可以这样做:

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

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

【讨论】:

    猜你喜欢
    • 2016-09-09
    • 2016-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    • 2012-03-01
    相关资源
    最近更新 更多