我有以下
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属性?
答案 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