Upvotes不工作

时间:2013-09-13 20:59:21

标签: ruby-on-rails

我正在尝试使用acts_as_votable gem处理问题。我收到的错误是:

Couldn't find Question with id=like

此网址未显示问题ID:

/comments/1/questions//like

当我手动输入问题ID时,它会给我这个:

No route matches [GET]

这是我的upvote方法:

def upvote
@question = Question.find params[:question_id]
@question.liked_by current_user
redirect_to @questions
end

这是routes.rb文件:

resources :comments do
  resources :questions do
    put :upvote, :on => :member, :as => :like
  end
end

和upvote按钮:

<%= link_to "Upvote", comment_question_like_path(@comment, @question), method: :post %>

Rake路由将comment_question_like_path显示为有效路由,因此不是问题。 谢谢你的帮助!

3 个答案:

答案 0 :(得分:0)

从此处跟进:acts_as_votable gem routes error

对不起,以前我不完全理解,现在试试这个:

的routes.rb

resources :comments do
  resources :questions do
     member do
        post "like", to: "questions#upvote"
     end
  end
end

在你的upvote方法中(假设问题和评论在模型中相关)

def upvote
  @question = Question.find params[:id]
  @question.liked_by current_user
  redirect_to comment_question_path(@question.comment, @question)
end

然后在视图中:

<%= link_to "Upvote", like_comment_question_path(@comment, @question), method: :post %>

答案 1 :(得分:0)

尝试使用以下代码。

在您的路线中

resources :comments do
  resources :questions do
   put :upvote, :on => :member, :as => :like
  end
end

在你看来

<%= link_to "Upvote", like_comment_question_path(@comment, @question), method: :put %>

在您的控制器中

def upvote
  @question = Question.where('id = ? and comment_id = ?', params[:id], params[:comment_id]).first
  unless @question.blank? 
    @question.liked_by current_user
    redirect_to comment_question_path(params[:comment_id], @question)
  else
    flash[:error] = 'Question not found'
    redirect_to comment_questions_path(params[:comment_id])
  end
end

答案 2 :(得分:0)

您说您已登录/comments/2/questions页面,这意味着您正在执行questions#index操作,您可以在其中加载当前评论的所有问题,然后使用@questions.each do |question|循环完成所有问题所以每个问题的链接应如下所示:

<%= link_to "Upvote", comment_question_like_path(@comment, question) %>

而不是:

<%= link_to "Upvote", comment_question_like_path(@comment, @question) %>

由于您没有@question变量可用,这就是为什么您没有设置/comments/1/questions//like和问题参数的原因,应该是:  /comments/1/questions/5/like

修改


它在我的应用中对我有用的方式,路线

resources :comments do
  resources :questions do
    member do
      get :upvote
    end
  end
end

链接

<%= link_to "Upvote", comment_question_upvote_path(@comment, question) %>

他们建立了您需要为链接指定method: post所需的路线。