2013-09-16 3 views
1

с использованием Rails 3 с жемчужиной vestal_versions и имеют такую ​​ситуацию:Rails 3 vestal_versions: Создать новую версию на родительской модели при изменении в детской модели

class Post < ActiveRecord::Base 
    versioned 
    has_many :comments 
    (...) 
end 

class Comment < ActiveRecord::Base 
    belongs_to :post 
    (...) 
end 

Versioning модели Post работает безупречно. Я хочу, чтобы, как только созданная/обновленная модель комментариев добавлена, соответствующая модель Post должна получить новую версию. (Мне не нужна функция восстановления vestal_versions.)

Какова была бы правильная стратегия для достижения этой цели?

ответ

1

Я использовал papertrail gem для этого типа задач, но это должно сработать для вас. Идея состояла бы в том, чтобы обновить сообщение комментария, когда будет создан комментарий - save будет вызван на его сообщение и создаст новую версию этого сообщения. Что-то вроде этого:

class Comment < ActiveRecord::Base 
    belongs_to :post 
    after_create :update_post 

    def update_post 
    self.post.save 
    end 
end 

снова, вероятно, не самый лучший способ, как вы должны позвонить сэкономить на почте каждый раз, когда вы добавляете комментарий, и это является проблемой производительности.

обновление на основе kwirschau комментарий

def update_post 
    self.post.send(:create_version) 
    end 
+0

Ах, хорошо. Я думаю, этот прагматичный подход должен это сделать. Благодаря! – tschlein

+0

Только для журнала: 'self.post.send (: create_version)' выполняет работу с vestal_versions (вместо 'self.post.save'). См. Также: https://github.com/laserlemon/vestal_versions/issues/11 – tschlein

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