ActionController::UrlGenerationError 没有路线匹配
ActionController::UrlGenerationError no route matches
我对 Rails 还是很陌生,但似乎无法掌握这条路线
show.html.erb
<%= link_to "up", vote_movie_review_path(@review, type: "up"), method: "post" %>
rake 路线
vote_movie_review POST /movies/:movie_id/reviews/:id/vote(.:format) reviews#vote
routes.rb
Rails.application.routes.draw do
devise_for :users
resources :movies do
resources :reviews do
member { post :vote }
end
end
reviews_controller.rb
class ReviewsController < ApplicationController
before_action :set_reviews, only: [:show, :edit, :update, :destroy]
before_action :set_movie
before_action :authenticate_user!
respond_to :html
def index
@reviews = Review.all
respond_with(@reviews)
end
def show
end
def vote
value - params[:type] == "up" ? 1 : -1
@review = Review.find(params[:id])
@review.add_evaluation(:votes, value, current_user)
redirect_to :back, notice: "thanks for the vote"
end
您正在使用嵌套路由,因此您需要像这样 vote_movie_review_path(@movies, @review, type: "up")
.
传递电影对象 also.use
检查你的路线,它显示 /movies/:movie_id/reviews/:id/vote
而你调用它的方式将生成类似 /reviews/id
的方法 post 并且你没有为它定义任何路线。
我对 Rails 还是很陌生,但似乎无法掌握这条路线
show.html.erb
<%= link_to "up", vote_movie_review_path(@review, type: "up"), method: "post" %>
rake 路线
vote_movie_review POST /movies/:movie_id/reviews/:id/vote(.:format) reviews#vote
routes.rb
Rails.application.routes.draw do
devise_for :users
resources :movies do
resources :reviews do
member { post :vote }
end
end
reviews_controller.rb
class ReviewsController < ApplicationController
before_action :set_reviews, only: [:show, :edit, :update, :destroy]
before_action :set_movie
before_action :authenticate_user!
respond_to :html
def index
@reviews = Review.all
respond_with(@reviews)
end
def show
end
def vote
value - params[:type] == "up" ? 1 : -1
@review = Review.find(params[:id])
@review.add_evaluation(:votes, value, current_user)
redirect_to :back, notice: "thanks for the vote"
end
您正在使用嵌套路由,因此您需要像这样 vote_movie_review_path(@movies, @review, type: "up")
.
检查你的路线,它显示 /movies/:movie_id/reviews/:id/vote
而你调用它的方式将生成类似 /reviews/id
的方法 post 并且你没有为它定义任何路线。