2012-06-17 32 views
6

Mam problem ze zrozumieniem tras i mam nadzieję, że ktoś mi pomoże.Szyny: Skierowanie do niestandardowej akcji kontrolera

Oto mój zwyczaj kontroler

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 

i mam ustawienia pliku/edit.html.erb i mój związek

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

trasie

get "settings/edit" 

nie działa do tego, ponieważ wtedy dostaję

undefined local variable or method `edit_settings_path' for #<#<Class:0x00000001814ad8>:0x00000002b40a80> 

Którą trasę mam podać? Nie mogę tego rozgryźć. Jeśli mogę umieścić „/ ustawienia/edit” zamiast ścieżki to bałagan tak szybko, jak jestem na drugiej stronie zasobów, ponieważ nazwa zasobu umieścić PRZED Ustawienia/edit

Thx

+0

Najpierw powiedz nam, jakie trasy wypróbowałeś – rubish

+0

edytowałem moje pytanie – Mexxer

Odpowiedz

16

następujące powinny zrobić:

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

Jeśli używasz /settings/edit bezpośrednio w linku, nie powinien mieć problemu z inną nazwą zasobu poprzedzany w ścieżce. Jednak bez wiodącego ukośnika, tj. settings/edit, może on mieć ten problem.

Powodem, dla którego edit_settings_path nie działa, może być fakt, że nie zadeklarowano nazwanej trasy. Musisz użyć opcji :as, aby zdefiniować, która metoda będzie generować tę ścieżkę/adres URL.

+0

Dziękuję bardzo! Naprawdę zapomniałem o/przed tym. Skończyło się na tym, że korzystałem z twojego rozwiązania :) – Mexxer

4

Jeśli chcesz, aby wyraźnie określić trasę, należy użyć coś jak

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

Oświadczenie to określa, że ​​po odebraniu żądania GET do ustawienia/edit, zadzwoń SettingsController # metodę edycji, i że poglądy może odwoływać się do tego linku za pomocą "edit_settings_path".

Poświęć trochę czasu na przeczytanie the Rails guide on routing. Wyjaśnia routing lepiej niż jakiekolwiek inne odniesienie tam.

Należy również pamiętać o zadaniu rake routes, które zawiera szczegółowe informacje o wszystkich trasach zdefiniowanych w aplikacji.

1

Zmień swoją drogę do

resources :settings 

I to prawdopodobnie po prostu pracować.

Powiązane problemy