0

我正在关注 schneems关于创建 Reddit 克隆的Rails 教程的精彩介绍,并希望扩展“投票”结构,不仅可以用于问题,还可以用于评论,并且很难弄清楚如何传递到控制器question_id因此comment_id它可以相应地投票赞成或反对,而不是将使用限制为仅question_id.

目前, my 中只有一个create函数VotesController,定义如下:

  def create
    @vote = Vote.where(:question_id => params[:vote][:question_id], :user_id => current_user.id).first #the question_id is baked right in.. 
    if @vote
      @vote.up = params[:vote][:up]
      @vote.save
    else
      @vote = current_user.votes.create(params[:vote])
    end
    redirect_to :back
  end

谢谢你的帮助!

4

1 回答 1

1

好吧,当您尝试对评论进行投票时,这意味着它params[:vote]应该包含 a:comment_id而不是 a :question_id,对吗?

所以你的where陈述需要要么是

# for a question
where(:question_id => params[:vote][:question_id], :user_id => current_user.id)

# for a comment
where(:comment_id => params[:vote][:comment_id], :user_id => current_user.id)

您可以通过各种方式来解决此问题,例如通过检查 if params[:vote].has_key?(:question_id),但一个简单的选择是使用Hash#slice

where(params[:vote].slice(:question_id, :comment_id).merge(:user_id => current_user.id))
于 2013-01-18T23:00:06.993 回答