2011-01-22 2 views
1

В моем приложении rails у меня есть модель сообщений, в которой есть комментарии _Many.Rails 3, обновленная связанная модель в контроллере при создании записи

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

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

У кого-нибудь есть представление об определенном способе сделать это?

@post = Post.find_by_id(@comment.post_id) 
    @post.save! 

Не работает.

Спасибо!

-Elliot

+1

Как примечание стороны, причина в вашем фрагменте кода не обновляет атрибут updated_at Почты из-за частичных обновлений : http://ryandaigle.com/articles/2008/4/1/what-s-new-in-edge-rails-partial-updates –

ответ

4

Вы можете использовать: сенсорный awesomess, чтобы обновить updated_at

Так что если у вас есть

class Post 
    has_many :comments 
end 

class Comment 
    belongs_to :post, :touch=>true 
end 

Тогда когда вы сохраните комментарий, он коснется сообщения и обновит update_at.

Больше информации:

+0

nice :) Я никогда не знал, что этот вариант существует! –

+0

Мой путь имеет смысл для других вещей, и OP должен знать это, но +1 здесь для магии Rails. – scragz

+0

@scragz Согласен, все ответы здесь имеют смысл –

0

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

Кроме того, вы не хотели бы называть self.post.update_attributes из комментария, потому что это было бы связано со слишком многими подробными данными.

# in comment.rb 
after_save :update_post_activity 

def update_post_activity 
    self.post.update_activity if self.post? 
end 

# in post.rb 
def update_activity 
    self.update_attributes(:updated_at => Time.now) 
end 
1

Я бы реализовать его в модели commment

class Comment < ActiveRecord::Base 
    belongs_to :post 

    def after_create 
    post.update_attribute(:updated_at, Time.now) 
    end 
end 
Смежные вопросы