更新前的增量计数

时间:2012-07-29 13:29:10

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

我的count表格中有一个tags列。如果在更新时将标记添加到帖子中,我想增加标记计数,并且它已经在db中。我把它添加到我的帖子模型中:

before_update :increment_tag

def increment_tag
  db_post = Post.find_by_id(self)
  self.tags.each do |tag|
    unless db_post.tags.include? tag
      tag.update_attribute("count", tag.count + 1)
    end
  end
end

我从db获取帖子并测试当前标签是否已经在db中,如果是,没有任何反应,如果它不存在,它应该更新count字段。但由于某些原因,这不起作用。

1 个答案:

答案 0 :(得分:2)

标签中不应包含Count列。您应该正确设置模型,以便执行以下操作:

db_post.tags.count

如果你做得对,你可以在你的标签中得到这个:

tag.post.tags.count

如果您的目标是查找帖子中使用标签的次数,总的来说,您可以简单地计算TagToPostColumn中的实例(如果有的话),您需要正确计算这是多次 - 很多关系。

然后你做:

  

TagToPostColumn.where(tag_id:someTag.id).count

count是一个标准属性,您永远不必自己跟踪,除非您确实需要一个名为count的列来跟踪数据库中的模型之外的其他内容。但是,将其命名为除计数之外的其他东西是个好主意,因为它可能会导致模糊属性。

另外,我发现你这样做很奇怪:

  

db_post = Post.find_by_id(self)

为什么不只是使用self参数,而不是进行数据库查找以查找已有的帖子。