2012-01-03 24 views
29

रेल मैं एक (मुझे लगता है कि) रूटिंग त्रुटि में चल रहा हूँ, जबकि सहायक form_for रेल का उपयोग कर का उपयोग करते समय। मैं चारों ओर खोज कर रहा हूं और this question पर देखा है, लेकिन बहुवचन के साथ "static_event" के लिए बहुवचन "static_events" है इसलिए मुझे नुकसान हुआ है। किसी भी मदद पर कब्जा कर लिया जाएगा। यहाँ विवरण .... हैंअपरिभाषित विधि form_for

ActionView::Template::Error (undefined method `static_events_path' for #<#<Class:0x007f9fcc48a918>:0x007f9fcc46fa78>): 

मेरे मॉडल:

class StaticEvent < ActiveRecord::Base 
attr_accessible :content, :title, :discount, :location, :day_of_week, :start_time 

मेरे नियंत्रक:

class StaticEventsController < ApplicationController 

    before_filter :authenticate, :only => [:create, :destroy] 
    before_filter :authorized_user, :only => [:destroy] 


    def new 
    @title = "Share An Event" 
    @static_event = StaticEvent.new 
    end 

    def create 
    @static_event = current_user.static_events.build(params[:event]) 
    if @static_event.save 
     flash[:success] = "Event Shared" 
     redirect_to @static_event #this was the old version 
    else 
     render :new 
    end 
    end 

मार्ग:

match '/static-events/new', :to => 'static_events#new' 
match '/static-events/',  :to => 'static_events#index' 
match '/static-events/:id', :to => 'static_events#show' 

दृश्य

<%= form_for (@static_event) do |f| %> 
<%= render 'shared/error_messages', :object => f.object %> 
<%= text_field "static_event", "title", "size" => 48 %> 
<%= time_select "static_event", "start_time", {:ampm => true, :minute_step => 15} %> 
<%= text_area "static_event", "content", "cols" => 42, "rows" => 5 %> 
<%= text_field "static_event", "discount", "size" => 48 %> 
<%= text_field "static_event", "location", "size" => 48 %> 
<%= text_field "static_event", "day_of_week", "size" => 48 %> 
<input name="" type="submit" class="button" value="share on chalkboard" /> 
<% end %> 

उत्तर

24

केवल resources विधि का उपयोग कर बनाया मार्ग अपने आप नाम हैं।

match '/static-events/new', :to => 'static_events#new', :as => :new_static_event 
match '/static-events/',  :to => 'static_events#index', :as => :static_events 
match '/static-events/:id', :to => 'static_events#show', :as => :static_event 

हालांकि, यह resources विधि का उपयोग करने के लिए बेहतर है:

आप अपने मार्गों नाम के लिए चाहते हैं, :as विकल्प का उपयोग करें। तुम्हें पता है, पहले पैरामीटर के रूप अपने मॉडल के "सही" नाम से गुजरना होगा तो पथ को ओवरराइड अगर आप चाहते हैं:

resources :static_events, :path => 'static-events' 
+0

ग्रेट तय की है, मैंने इसे अपडेट किया है। धन्यवाद Fábio! – Alekx

+0

रेल 4 में, आपको http विधि के साथ-साथ – courtsimas

+1

के साथ निर्दिष्ट करने की आवश्यकता होगी, एक पक्ष के रूप में, नेस्टेड मार्गों के लिए आपको मूल्यों की एक जोड़ी पारित करनी होगी ताकि 'form_for ([@ static_event, @ sub_event]) ' –

3

भागो rake routes और आप अपने मार्गों की सूची दिखाई देगी। फिर आप रूट रूट फ़ाइल को उचित मार्ग पथ के लिए ठीक कर सकते हैं।

resources 'static-events', :only => [:new, :create] 

इस नए के लिए एक मार्ग बनाने और तरीकों का निर्माण करेगा:

+0

जो मैं देख सकता हूं, मेरे मार्ग सटीक दिखते हैं। – Alekx

+0

अच्छी डीबगिंग टिप - इससे मेरी मदद मिली। – infl3x

8

सबसे पहले, आप अपने मार्गों इस तरह से परिभाषित करना चाहिए।

क्योंकि जब आप एक नई ActiveRecord ऑब्जेक्ट का उपयोग करने के लिए तर्क के रूप में उपयोग करते हैं, तो यह पोस्ट रूट के साथ आपकी रूट फ़ाइल में static_events_path की तरह * s_path जैसा दिखता है।

मैं जिस तरह से आप अपने मार्गों पोस्ट क्रिया के साथ static_events_path पैदा नहीं करता परिभाषित किया है (यदि आप रेक मार्गों का उपयोग करके देख सकते हैं कि के रूप में Megas कहा) लगता है। तो अपने रेल 3 परियोजनाओं में मैच के बजाय अब मिलान का उपयोग न करें, संसाधनों का उपयोग करें या प्राप्त करें/पोस्ट करें ...।

संपादित

मैं कल नोटिस नहीं किया था, लेकिन वहाँ विधि बनाने के लिए कोई मार्ग है। पहले static_events # सूचकांक नीचे मार्ग जोड़ें या अपने सभी मार्गों को हटाने और करना है कि मैं ऊपर कहा।

post '/static-events/', :to => 'static_events#create' 
+0

': स्थैतिक-घटनाएं 'वैध प्रतीक नहीं है –

+0

मैंने उपयोग किया: static_events और यह काम किया। – Alekx

+0

आप सही इंजेक्ट हैं, प्रतीकों में डैश नहीं हो सकते हैं। मैंने गलती – basgys

1

यह मुझे क्या हुआ जब मैं एक नेस्टेड संसाधन उपयोग कर रहा था, लेकिन वास्तव में माता-पिता को प्रारंभ करना भूल गया कैनकन में load_and_authorize_resource का उपयोग कर संसाधन। इसलिए, मूल संसाधन शून्य था और यह इस त्रुटि को फेंक दिया।

मैंने नियंत्रक में माता-पिता पर load_and_authorize_resource घोषित करके इसे ठीक किया।

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