我正在尝试使用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显示为有效路由,因此不是问题。 谢谢你的帮助!
答案 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
所需的路线。