0

我创建的是我的主题表中的一个“活动”字段,我可以使用它来显示活动主题,它首先包含创建主题的时间,当有人评论时,它将使用 comment.created_at 时间并把它在主题表的活动字段中,就像任何其他论坛系统一样。

我在这里发现了类似的问题 如何按最后评论的日期排序并按最后创建的日期排序?

但它不会对我有用,我不知道为什么它不会。而且我也不明白在这种情况下是否需要使用 counter_cache 。我为我的评论使用了多态关联,因此我不确定如何使用 counter_cache。它在我的主题表中工作正常,可以将 created_at 时间复制到活动字段。但是当我创建评论时它不会工作。

错误:

CommentsController#create 中的 NoMethodError

未定义的方法“主题”

主题.rb

class Topic < ActiveRecord::Base
  attr_accessible :body, :forum_id, :title

  before_create :init_sort_column

  belongs_to :user
  belongs_to :forum
  validates :forum_id, :body, :title, presence: true

  has_many :comments, :as => :commentable

  default_scope order: 'topics.created_at DESC'

  private
  def init_sort_column
    self.active = self.created_at || Time.now
  end
end

评论.rb

class Comment < ActiveRecord::Base
  attr_accessible :body, :commentable_id, :commentable_type, :user_id

  belongs_to :user
  belongs_to :commentable, :polymorphic => true

  before_create :update_parent_sort_column

  private

  def update_parent_sort_column
    self.topic.active = self.created_at if self.topic
  end

end
4

1 回答 1

0

没有意识到您正在使用多态关联。使用以下内容:

def update_parent_sort_column
  commentable.active = created_at if commentable.is_a?(Topic)
  commentable.save!
end

应该做的伎俩。

于 2013-03-04T15:42:09.573 回答