2012-06-17 21 views
6

मेरे पास मार्गों को समझने में बहुत मुश्किल समय है और मुझे उम्मीद है कि कोई मेरी मदद कर सकता है।रेल: कस्टम नियंत्रक कार्रवाई के लिए मार्ग

यहाँ मेरी कस्टम नियंत्रक

class SettingsController < ApplicationController 
    before_filter :authenticate_user! 

    def edit 
     @user = current_user 
    end 

    def update 
     @user = User.find(current_user.id) 
     if @user.update_attributes(params[:user]) 
     # Sign in the user bypassing validation in case his password changed 
     sign_in @user, :bypass => true 
     redirect_to root_path 
     else 
     render "edit" 
     end 
    end 
end 

है और मैं फ़ाइल सेटिंग्स/edit.html.erb और मेरे लिंक

<li><%= link_to('Settings', edit_settings_path) %></li> 

मार्ग है

get "settings/edit" 

काम नहीं करता है इसके लिए, क्योंकि मुझे

मिलता है
undefined local variable or method `edit_settings_path' for #<#<Class:0x00000001814ad8>:0x00000002b40a80> 

मुझे यह किस मार्ग को देना है? मेरे द्वारा इसका निर्धारण नहीं किया जा सकता। अगर मैं डाल एक पथ के बजाय "/ सेटिंग्स/संपादन" यह रूप में जल्द ही मैं एक अन्य संसाधन पृष्ठ पर हूँ के रूप में क्योंकि संसाधन नाम से पहले सेटिंग्स/संपादन

Thx

+0

पहले हमें बताएं कि आपने किन मार्गों का प्रयास किया है – rubish

+0

मेरे प्रश्न को संपादित किया – Mexxer

उत्तर

16

करना चाहिए के बाद डाला जाता है को खराब करता:

get 'settings/edit' => 'settings#edit', :as => :edit_settings 
# you can change put to post as you see fit 
put 'settings/edit' => 'settings#update' 

आप कड़ी में सीधे /settings/edit का उपयोग करते हैं, तो आप अन्य संसाधन नाम के साथ समस्या यह रास्ते में prepended किया जा रहा नहीं होना चाहिए। हालांकि, अग्रणी स्लैश के बिना, यानी settings/edit में यह समस्या हो सकती है।

कारण क्यों edit_settings_path काम नहीं कर रहा है क्योंकि आपने नामित मार्ग घोषित नहीं किया है। आपको :as विकल्प का उपयोग करने के लिए यह निर्धारित करना होगा कि आप किस विधि से इस पथ/यूआरएल उत्पन्न करेंगे।

+0

बहुत बहुत धन्यवाद! मैं वास्तव में बस इसके सामने/भूल गया। हालांकि मैं आपके समाधान का उपयोग कर समाप्त हुआ :) – Mexxer

4

आप स्पष्ट रूप से मार्ग को परिभाषित करना चाहते हैं, तो आप की तरह

get 'settings/edit' => 'settings#edit', :as => edit_settings 

इस बयान को परिभाषित करता है कि जब एक GET अनुरोध के लिए सेटिंग/संपादन प्राप्त होता है, फोन SettingsController # संपादित विधि, और कहा कि विचारों कुछ प्रयोग करेंगे 'edit_settings_path' का उपयोग करके इस लिंक का संदर्भ दे सकते हैं।

the Rails guide on routing पढ़ने के लिए कुछ समय लें। यह वहां किसी भी अन्य संदर्भ से बेहतर रूटिंग बताता है।

rake routes कार्य को ध्यान में रखें, जो आपके आवेदन में परिभाषित सभी मार्गों के विवरण सूचीबद्ध करता है।

1

resources :settings 

के लिए अपने मार्ग बदल सकते हैं और यह शायद सिर्फ काम करेंगे।

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