2013-10-21 8 views
6

मैं रेल 4 सीखते समय एक छोटे से अभ्यास के माध्यम से काम कर रहा हूं, लेकिन ऑब्जेक्ट को अपडेट करने का प्रयास करते समय रूटिंग त्रुटि में चल रहा हूं। मैंने एक त्रुटि संदेश प्राप्त हो रही है: कोई मार्ग मैचों [पोस्ट] "/ फिल्मों/1/संपादित करें" लेकिन नहीं देख सकते हैं, जहां मेरे कोड सही नहीं है:रेल 4 राउटिंग त्रुटि: कोई रूट मिलान नहीं है [POST]

मेरी 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 

+०१२३५१६४१०: यहाँ मेरी 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" %>  

और 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 

पिछले है, यहाँ 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 

उत्तर

3

form_for @movie.nameform_for @movie होना चाहिए। मैं यह नहीं बता सकता कि क्या हो रहा है, लेकिन मुझे संदेह है कि यह किसी भी तरह से आपको <form action=""> दे रहा है।

+0

कि मेरा अनुमान है कि रूप में अच्छी तरह होगा, और current_url जो संपादित पथ – Doon

+0

धन्यवाद @meager है वापस करने के लिए पोस्ट करेंगे खाली कार्रवाई, लेकिन अब मैं एक '' में फिल्म # संपादित NoMethodError हो रही है: अपरिभाषित विधि # movie_path 'के लिए # <# <कक्षा: 0x007ff4cb263e38>: 0x007ff4c99f6300> ''? – TomK

+0

आपने अपने मार्गों का नाम नहीं दिया है। आपको या तो 'प्राप्त करें' फिल्मों का उपयोग करने की आवश्यकता है "=>" फिल्में # इंडेक्स ", जैसे:" फिल्में ", या, सही बात, बस अपने सभी मार्गों को फेंक दें और केवल 'संसाधन: फिल्में' का उपयोग करें। – meagar

2

आपका त्रुटि संदेश दिखाता है कि आप संपादन यूआरएल के लिए एक पोस्ट अनुरोध भेज रहे हैं।

No route matches [POST] "/movies/1/edit"

जबकि मार्ग में आपने एक अनुरोध अनुरोध निर्दिष्ट किया है।

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

मेरा मानना ​​है कि किसी भी तरह से समस्या पैदा हो रही है और इसलिए आप पोस्ट करने के अनुरोध को बदल सकते हैं।

post "movies/:id/edit" => "movies#edit" 
+1

जो वास्तविक समस्या नहीं है। आप * प्राप्त * करने के लिए संपादन फ़ॉर्म, और POST/परिवर्तन करने के लिए संसाधन को वापस PUT कर रहे हैं। एक पोस्ट ब्रेक में संपादन बदलना। और करने के लिए सही बात नहीं है। – Doon

+2

उनके मार्ग ठीक हैं, उन्हें निश्चित रूप से गलत तरीके से स्वीकार करने के लिए अपने मार्गों को संशोधित नहीं करना चाहिए। यह सिर्फ उसे एक और बग देने जा रहा है, और उसका मार्ग निश्चित रूप से 'फिल्में # अपडेट' तक नहीं पहुंच जाएगा जहां इसे पहुंचने की जरूरत है। – meagar

संबंधित मुद्दे