2016-02-12 4 views
0

У меня есть модель, которая имеет два столбца admin_approved и approval_date. Обновление администратора admin_approved с помощью activeadmin. Я хочу, чтобы администратор обновил этот столбец approval_date и обновил current_time.Обновить еще один столбец, если существует определенный столбец при обновлении

Я не могу понять, как я это делаю. call_back Использую.

ответ

1
#app/models/model.rb 
class Model < ActiveRecord::Base 
    before_update 'self.approval_date = Time.now', if: "admin_approved?" 
end 

Это предполагает, что вы admin_approved (bool) и approval_date (datetime) в таблице.

Способ, которым он работает, - use a string, чтобы оценить, является ли атрибут admin_approved «истинным» перед обновлением. Если да, то устанавливает approval_date на текущее время.

1

Используйте after_save обратный вызов внутри вашей модели.

Было бы что-то вроде этого:

after_save do 
    if admin_approved_changed? 
    self.approval_date = Time.now 
    save! 
    end 
end 

Или изменить состояние, как вам нравится!

1

Вы можете установить assert_date перед тем, как экземпляр модели будет сохранен. Таким образом, вы сохраняете процесс записи базы данных вместо использования after_save, где вы сохраняете свой экземпляр, а в обратном вызове after_save вы сохраните его снова.

class MyModel < ActiveRecord::Base 
    before_save :set_approval_date 

    # ... your model code ... 

    private 

    def set_approval_date 
    if admin_approved_changed? 
     self.approval_date = Time.now 
    end 
    end 
end 

Может быть в контроллере:

my_instance = MyModel.find(params[:id]) 
my_instance.admin_approved = true 
my_instance.save 
Смежные вопросы