我正在关注schneems关于创建Reddit克隆的Rails tutorial的精彩介绍,并希望扩展“投票”结构,不仅可以用于解决问题,还可以用于评论,并且很难弄清楚如何将question_id
和comment_id
传递给控制器,以便它可以相应地向上或向下投票,而不是仅将使用限制为question_id
。
目前,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
感谢您的帮助!
答案 0 :(得分:1)
好吧,当您尝试对评论进行投票时,这意味着params[:vote]
应该包含:comment_id
而不是: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)
您可以通过各种方式解决此问题,例如检查是否params[:vote].has_key?(:question_id)
,但是使用Hash#slice
是一个简单的选择:
where(params[:vote].slice(:question_id, :comment_id).merge(:user_id => current_user.id))