铁轨,递增计数器不工作

时间:2012-04-21 06:12:21

标签: ruby-on-rails syntax counter

我有以下

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

我试图增加一个标签计数,但我唯一知道的是来自name值的'java'或'ruby'这个词。但是我没有成功增加我的计数器。我尝试做增量和increment_counter但似乎没有工作。我也看了缓存计数器,但这个关联不是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属性?

1 个答案:

答案 0 :(得分: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