Как я могу установить поле отметки времени с помощью методов «update» или «update_all» ActiveRecord? - PullRequest
1 голос
/ 23 мая 2011

Это проект Rails 3.

Я просто не могу понять, как это сделать. У меня есть две колонки:

last_migrated timestamp
migration_message text

, который я хотел бы обновить, с условием:

:subdomain => "someval"

и все же все, что я пробовал, провалилось. Я пробовал все варианты MyModel.update и MyModel.update_all, о которых я могу подумать. Документация просто не проникает в мой толстый череп по какой-то причине. Пожалуйста, помогите.

Чтобы уточнить, я хочу использовать метод AR, чтобы сделать следующее:

update brands
set last_migrated = x,
    migration_message = y
where subdomain = 'someval'

Ответы [ 3 ]

4 голосов
/ 26 мая 2011

Вы можете просто использовать метод where следующим образом:

Brand.where(:subdomain => 'someval').update_all(:last_migrated => Time.now, :migration_message => 'Some message')
0 голосов
/ 26 мая 2011

Я закончил:

  ActiveRecord::Base.connection.execute("update brands set migration_status = 'COMPLETE', migration_message = '', last_migrated = sysdate() where subdomain = '#{self.subdomain}'")

, что не лучший способ сделать это в AR, и это не Rails Way, но другие вещи, которые я пробовал в AR, не ведут себя (update_all), так что по крайней мере это работы.

И так как никто не мог ответить на мой вопрос (спасибо, что попробовал amit), и это работает, то он останется ответом, пока кто-то не сможет предложить лучший.

0 голосов
/ 23 мая 2011

Вопрос неясен, но если вы пытаетесь обновить атрибуты модели, используйте:

ModelName.update_attributes!(:migration_message => "The message", :last_migrated => the_timestamp) if ModelName.subdomain == "someval"

, где the_timestamp - объект DateTime или объект Date, в зависимости от того, как вы его определили вмиграция.

Для использования update_all:

ModelName.where(<condition>).update_all(:migration_message => "The message", :last_migrated => Time.now)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...