2012-06-01 6 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 

Который самостоятельно, объясняющая.

Проблемы: Я должен иметь возможность обновлять атрибут объекта без транзакции простым запросом mysql. Как я могу это сделать, используя activerecord?

+0

Я не понимаю, если вы не хотите транзакций, вы можете сделать «фиксацию» после каждого запроса или изменить механизм таблиц на MyISAM – jcho360

+0

Я хочу иметь механизм INNODB, но мне не нужна транзакция в что в отдельном случае достаточно простого запроса на обновление. – user973254

+0

попробуйте написать «commit»; после каждого запроса, которого было бы достаточно, чтобы сохранить изменения. – jcho360

ответ

0

Может быть, вы ищете update-column

Updates один атрибут объекта, не вызывая сохранения

  • Validation пропускается.
  • Обратные вызовы пропускаются.
  • 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.

Смежные вопросы