Tôi đang làm việc thông qua một bài tập nhỏ trong khi học Rails 4, nhưng chạy vào một lỗi định tuyến trong khi cố gắng cập nhật một đối tượng. Tôi tiếp tục nhận được một thông báo lỗi: Không trận tuyến đường [POST] "/ phim/1/chỉnh sửa" nhưng có thể không nhìn thấy nơi mã của tôi là không đúng:Rails 4 RoutingError: No Route Matches [POST]
movies_controller.rb tôi
class MoviesController < ApplicationController
def index
@movies = Movie.all
end
def show
@movie = Movie.find(params[:id])
end
def new
@movie = Movie.new
end
def create
@movie = Movie.create(movie_params)
if @movie.save
redirect_to "/movies/#{@movie.id}", :notice => "Your movie was saved!"
else
render "new"
end
end
def edit
@movie = Movie.find(params[:id])
end
def update
@movie = Movie.find(params[:id])
if @movie.update_attributes(params[:movie])
redirect_to "/movies"
else
render "edit"
end
end
def destroy
end
private
def movie_params
params.require(:movie).permit(:name, :genre, :year)
end
end
Dưới đây là edit.html.erb tôi
<h1>Now Editing:</h1>
<h3><%= @movie.name %></h3>
<%= form_for @movie.name do |f| %>
<%= f.label :name %>
<%= f.text_field :name %>
<br>
<%= f.label :genre %>
<%= f.text_field :genre %>
<br>
<%= f.label :year %>
<%= f.number_field :year %>
<br>
<%= f.submit "Update" %>
và tập tin routes.rb:
MovieApp::Application.routes.draw do
get "movies" => "movies#index"
post "movies" => "movies#create"
get "movies/new" => "movies#new"
get "movies/:id" => "movies#show"
get "movies/:id/edit" => "movies#edit"
put "movies/:id" => "movies#update"
end
cuối cùng, đây là đầu ra từ chạy rake routes
:
Prefix Verb URI Pattern Controller#Action
movies GET /movies(.:format) movies#index
POST /movies(.:format) movies#create
movies_new GET /movies/new(.:format) movies#new
GET /movies/:id(.:format) movies#show
GET /movies/:id/edit(.:format) movies#edit
PUT /movies/:id(.:format) movies#update
đó sẽ là tôi đoán là tốt, và hành động trống sẽ gửi trở lại current_url đó là con đường chỉnh sửa – Doon
Cảm ơn @meager, nhưng bây giờ tôi nhận một '' NoMethodError trong phim # chỉnh sửa: không xác định phương pháp 'movie_path 'cho # <#: 0x007ff4c99f6300>' '? –
TomK
Bạn chưa đặt tên cho tuyến đường của mình. Bạn cần sử dụng hoặc sử dụng 'get 'movies" => "movies # index", như: "movies" ', hoặc, điều đúng, chỉ cần ném ra tất cả các route của bạn và chỉ sử dụng' resources: movies'. – meagar