:::::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::
::: 解决了 :::
能够找出 Vote 模型上的 counter_cache 并在主题中使用它。更新了下面的问题。一旦 Topic 模型有了 votes_count,我所要做的就是把它放在视图中并在控制器中更新我的计数。结果很简单。但是没有找到信息,所以这应该可以帮助其他人,在所有令人困惑的荣耀中。一路向下寻找答案。
干杯
:::::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::
:::编辑:::
:::历史见下文:::
这是对原帖的修改。在我尝试宝石解决方案之前,我真的很接近我所拥有的。我在投票模型上使用了comment_cache ,但现在我不知道如何增加缓存。
class Vote < ActiveRecord::Base
belongs_to :topic, :counter_cache => true
end
并在视图中调用 topic.votes.size,它现在显示没有 Active Record 可枚举的计数。
<td><%= pluralize(topic.votes.size, "vote") %></td>
<td><%= button_to '+1', upvote_topic_path(topic), method: :post %></td>
<td><%= button_to '-1', downvote_topic_path(topic), method: :post %></td>
index.html.erb
Listing Topics
Title
test 1 vote [+1] [-1] Delete
New Topic
但是comment_cache 不允许负数。我仍在对记录使用创建/销毁,而不是在计数中添加和减去一个数字。如何增加和减少?这些方法说我缺少值。目前,@topic.votes.last.destroy 失败是有道理的,因为没有更多的投票可以销毁,因此总数不能小于零。
如何设置以便我增加/减少 comment_cache 值,以便可能出现负数?我尝试了@topic.votes.increment 和@topic.votes.increment_counter 但他们要求我不知道该使用什么的2 个参数。试过了
@topic.increment_counter(:votes_count, params[:id])
但没有运气。
NoMethodError in TopicsController#upvote
undefined method `increment_counter' for #<Topic:0x007f87d974a4b0>
Extracted source (around line #433):
431
432
433
434
435
436
else
match = match_attribute_method?(method.to_s)
match ? attribute_missing(match, *args, &block) : super
end
end
:::::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::::::::
:::这条线以下的历史:::
:::::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::::::::
再次访问 Rails,我正在尝试对主题进行简单的投票计数器。我想要做的是增加/减少投票记录中的计数(整数)列。
主题 has_may :votes 和 Vote belongs_to :topic
在我用过的topics_controller.rb
def upvote
@topic = Topic.find(params[:id])
@topic.votes.increment_counter(:tally, params[:id])
redirect_to(topics_path)
end
def downvote
@topic = Topic.find(params[:id])
@topic.votes.decrement_counter(:tally, params[:id])
redirect_to(topics_path)
end
但是我得到了一个有趣的 ActiveRecord 键,而不是视图中的值,而不是票数。
index.html.erb:
from the view
<td><%= pluralize(topic.votes(:tally), "vote") %></td>
<td><%= button_to '+1', upvote_topic_path(topic), method: :post %></td>
<td><%= button_to '-1', downvote_topic_path(topic), method: :post %></td>
result of view
test #<Vote::ActiveRecord_Associations_CollectionProxy:0x007fbb16451f68> votes
Delete
从Rails 控制台虽然增量没有显示:
2.1.5 :022 > Vote.first
Vote Load (0.5ms) SELECT "votes".* FROM "votes" ORDER BY "votes"."id" ASC LIMIT 1
=> nil
2.1.5 :023 > Vote
=> Vote(id: integer, topic_id: integer, created_at: datetime, updated_at: datetime, tally: integer)
我想我已经设置了routes.rb好的,但是我不确定双倍
Rails.application.routes.draw do
resources :topics do
member do
post 'upvote'
post 'downvote'
end
end
root 'topics#index'
end
无论如何,我认为这要么是错误的增量方法,要么是我缺少的东西。任何帮助表示赞赏。干杯