【发布时间】:2016-02-10 18:37:05
【问题描述】:
我是 ruby on rails 的初学者。我正在构建一个用于在 Rails 上练习 ruby 的电影评论应用程序。在该应用程序中,我正在为电影添加投票功能(upvote 和 downvote)。
电影#index
<%= link_to "Add movie", new_movie_path %>
<% @movies.each do |movie| %>
<%= image_tag movie.thumbnail.url(:medium) %>
<%= link_to movie.title, movie_path(movie) %>
<%= link_to "upvote", {controller: "votes", action: "upvote"} %>
<%= link_to "downvote",{controller:"votes", action: "downvote"} %>
<% end %>
投票控制器
class MoviesController < ApplicationController
def upvote
Movie.find(params[:id]).vote.upvote += 1
redirect_to movies_path
end
def downvote
Movie.find(params[:id]).vote.downvote += 1
redirect_to movies_path
end
end
routes.rb
Rails.application.routes.draw do
resources :movies
resources :votes
root 'movies#index'
end
当我点击链接 upvote 和 downvote(movies#index) 时,upvote 和 downvote动作没有触发。它正在抛出错误
没有路线匹配 {:action=>"upvote", :controller=>"votes"}
【问题讨论】:
-
upvote不是默认定义的操作。您需要手动声明它,或者改用create。 -
我没有使用acts_as_votable。我用 :upvote 和 :downvote 列生成了投票模型
-
我不确定这有什么关系。
resources声明了通常的 REST 操作,upvote不是其中之一。 -
如何使用链接中的 url 来触发点赞操作?谢谢:)
标签: ruby-on-rails ruby routing