因此,我执行的所有意图和目的都有相同的操作。然而,一件作品而另一部作品却没有。
数据库设置
add_column :cards, :score, :integer, :default => 0
add_column :cards, :comments, :integer, :default => 0
=> Card(id: integer, user_id: integer, event: text, created_at: datetime, updated_at: datetime, score: integer, comments: integer)
投票控制员(这个工作)
def create
@vote = Vote.where(:card_id => params[:vote][:card_id], :user_id => current_user.id).first
if @vote
@vote.up = params[:vote][:up]
@vote.save
@card = Card.find(params[:vote][:card_id])
if @vote.up == true
@card.score += 2
else
@card.score -= 2
end
@card.save
else
@vote = Vote.new
@vote.card_id = params[:vote][:card_id]
@vote.user = current_user
@vote.up = params[:vote][:up]
@vote.save
@card = Card.find(params[:vote][:card_id])
if @vote.up == true
@card.score += 1
else
@card.score -= 1
end
@card.save
end
redirect_to :back
end
评论控制器(不起作用)我得到“没有将Fixnum隐式转换为数组”
def create
@comment = Comment.new
@comment.message = params[:comment][:message]
@comment.card_id = params[:comment][:card_id]
@comment.user = current_user
@comment.save
@card = Card.find(params[:comment][:card_id])
@card.comments += 1
@card.save
redirect_to :back
end
我在这里缺少什么?感谢大家的帮助。
伊恩
答案 0 :(得分:4)
我猜你也有卡片和评论之间的关联,例如。 Card has_many :comments
。您的@card.comments
方法现在不明确 - 您指的是整数的关联或值吗? Rails假设关联,但你想要整数。
对于类似的内容,我建议查看计数器缓存:http://guides.rubyonrails.org/association_basics.html#belongs-to-association-reference(第4.1.2.3节)。这包括在您的卡片模型中添加comments_count
字段,并从评论到卡片添加counter_cache: true
。然后Rails将自动为您维护计数。
答案 1 :(得分:0)
@sevenseacat那样做了。我在睡觉前发布了这个问题,当我试图入睡时想到了这个问题。我认为不可能。感谢您确认我的想法并让我尝试一下。我正在查看计数器缓存,感谢您指出更好的方向。
伊恩