按最新创建的评论排序

时间:2013-03-04 15:25:49

标签: ruby-on-rails ruby-on-rails-3 comments

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

我在这里发现了类似的问题 How to order by the date of the last comment and sort by last created otherwise?

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

错误:

CommentsController中的NoMethodError #create

的未定义方法`主题'

Topic.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

Comment.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

1 个答案:

答案 0 :(得分:0)

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

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

应该做的伎俩。