0

我的表中有一个counttags。如果在更新时刚刚将标签添加到帖子中,并且它已经在数据库中,我想增加标签计数。我将此添加到我的帖子模型中:

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 中,如果是,则没有任何反应,如果它不存在,它应该更新计数字段。但由于某种原因,这不起作用。

4

1 回答 1

2

标记中不应有 Count 列。相反,您应该正确设置模型,以便可以执行以下操作:

db_post.tags.count

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

tag.post.tags.count

如果您的目标是找出标签在帖子中总共使用了多少次,您可以简单地计算 TagToPostColumn 中的实例(如果有的话),您需要确定这是一个多对多关系.

然后你做:

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

count是一个标准属性,您永远不必自己跟踪这一点,除非您实际上需要一个名为 count 的列来跟踪数据库中的模型以外的其他内容。但是,最好将其命名为 count 以外的其他名称,因为它可能导致属性不明确。

另外,我觉得你这样做很奇怪:

db_post = Post.find_by_id(self)

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

于 2012-07-29T13:42:36.290 回答