2013-10-21 17 views
6

Rails 4'ü öğrenirken küçük bir alıştırmayla çalışıyorum, ancak bir nesneyi güncellemeye çalışırken bir yönlendirme hatasıyla karşılaşıyorum. Bir hata iletisi almaya devam: my kodu doğru değil nerede rota yok eşleşmeleri [POST] "/ film/1/düzenle" ama göremiyorum:Raylar 4 RoutingError: Rota Eşleşmesi Yok [POST]

benim movies_controller.rb

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 

: İşte benim edit.html.erb

<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" %>  

ve routes.rb dosyasıdır

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 

son, burada rake routes çalışmasını çıkışı var:

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 

cevap

3

form_for @movie.nameform_for @movie olmalıdır. Neler olduğunu anlatamam ama bunun bir şekilde sana bir <form action=""> verdiğinden şüpheleniyorum.

+0

ve boş – Doon

+0

Teşekkür @meager düzenleme yolunu olduğunu current_url geri göndermek istiyorum eylem, ama şimdi bir '' Filmler # düzenlemede NoMethodError alıyorum: tanımsız yöntemi # <# için 'movie_path': 0x007ff4c99f6300> ''? – TomK

+0

Rotalarınızı isimlendirmediniz. "Filmler" dizinini kullanmanız gerekir: "filmler", ya da, doğru şey, sadece tüm rotaları atmak ve sadece 'kaynakları kullan: filmler'. – meagar

2

Hata mesajınız, url'yi düzenlemek için bir gönderi talebi gönderdiğiniz olduğunu gösterir. Rotada bir get talebi belirttiğiniz halde. Oysa, rotada bir istek isteğinde bulunmuşsunuzdur.

get "movies/:id/edit" => "movies#edit"

Bunun bir şekilde soruna neden olduğunu ve bu nedenle gönderilme isteğini değiştirebileceğinizi düşünüyorum.

post "movies/:id/edit" => "movies#edit" 
yanı Tahminimde olacağını
+1

gerçek sorun değil. * "GET" 'e sahip olursunuz. Düzenleme formu ve POST/PUT, değişiklikleri yapmak için kaynağı geri alır. Düzenlemeyi bir POST kopuğuna değiştirme. ve yapılacak doğru şey değil. – Doon

+2

Onun yolları iyi, kesinlikle yanlış yöntemi kabul etmek için onun rotalarını değiştirmemeli. Bu sadece ona başka bir hata verecek ve onun rotası kesinlikle ulaşması gereken yerlerde film # güncelleme'ye asla ulaşmayacak. – meagar