2011-01-22 78 views
1

在我的Rails應用程序中,我有Posts模型,其has_many註釋。Rails 3,在創建記錄時更新控制器中的鏈接模型

每次發佈新評論時,我都希望更新Posts模型中的updated_at列。

我假設我需要在評論控制器的創建方法中執行此操作。

有沒有人有一些想法做到這一點的具體方式?

@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 – 2011-01-22 19:19:59

回答

4

您可以使用:觸摸awesomess更新的updated_at

所以,如果你有

class Post 
    has_many :comments 
end 

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

然後當你保存評論時,它會觸及帖子並更新updated_at。

更多的相關信息:

+0

不錯:)我從來不知道這個選項存在! – 2011-01-22 19:16:04

0

你要儘可能的保持了控制器。控制器僅用於將用戶輸入和輸出引導至正確的位置。

此外,您不希望從Comment中調用self.post.update_attributes,因爲這會綁定太多的Post-specific細節。

# 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 
相關問題