0

我有以下

Tag.update_counters(Tag.where(:name => name).id, :count => 1)

我试图增加标签计数,但我唯一知道的是名称值中的“java”或“ruby”一词。但是我没有成功增加我的计数器。我尝试做增量和增量计数器,但似乎没有一个工作。我还查看了缓存计数器,但该关联不是 has_many 并且属于。相反,这是一个 has_many: 通过关联。

我究竟做错了什么?这是一种不好的做法吗?谢谢

更新。

我通过...修复了它

Tag.update_counters(Tag.where(:name => name).map(&:id), :count => 1)

有人可以解释为什么

Tag.where(:name => name).name

不工作?

Tag.where(:name => name)

返回标签哈希。我想通过调用 .name 来获取该标签的 name 属性?

4

1 回答 1

1

Tag.where(:name => name)返回所有给定的记录name。Rails 在运行此命令之前不知道是否有很多此类记录:1000、1 或 0。因此该语句返回 ARRAY 记录。如果您只想要一条记录,请使用:Tag.where(:name => name).first结果将是您数据库中的一条记录,因此在这种情况下您可以调用.name它。

update_counters足够聪明,可以从每个返回的记录中获取所有 id。如果您需要逐个访问此记录,可以在此处执行以下操作:

Tag.where(:name => name).each do |tag|
  logger.info tag.name # now you can use .name as you are dealing with a single record
end
于 2012-04-21T07:05:19.300 回答