没有将String隐式转换为Array

时间:2014-07-23 03:59:34

标签: ruby-on-rails

因此,我执行的所有意图和目的都有相同的操作。然而,一件作品而另一部作品却没有。

数据库设置

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

我在这里缺少什么?感谢大家的帮助。

伊恩

2 个答案:

答案 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那样做了。我在睡觉前发布了这个问题,当我试图入睡时想到了这个问题。我认为不可能。感谢您确认我的想法并让我尝试一下。我正在查看计数器缓存,感谢您指出更好的方向。

伊恩