0

これが私のコードです:

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 クエリによって、トランザクションなしでオブジェクト属性を更新できる必要があることです。アクティブレコードを使用してそれを達成するにはどうすればよいですか?

4

2 に答える 2

0

update-columnを探しているのかもしれません

save を呼び出さずに、オブジェクトの単一の属性を更新します。

  • 検証はスキップされます。
  • コールバックはスキップされます。
  • その列が使用可能な場合、updated_at/updated_on 列は更新されません。
于 2012-06-01T13:56:24.627 に答える
0

update_attributesトランザクションを使用しますが、奇妙なことに使用saveしません。そのため、トランザクションなしでコールバックとすべてのジャズが必要な場合は、次のことができます。

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

内部的には、update_attributes実際には呼び出しattributes=てからsave.

于 2015-04-06T18:53:32.727 に答える