2012-06-17 15 views
6

Ho davvero difficoltà a comprendere i percorsi e spero che qualcuno possa aiutarmi.Rails: percorso per l'azione del controller personalizzato

Ecco il mio controller personalizzato

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 

e ho le impostazioni del file/edit.html.erb e il mio link

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

Il percorso

get "settings/edit" 

non funziona per questo, perché poi ho

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

Quale percorso devo fornire? Non riesco a capirlo. Se ho messo "/ impostazioni/modifica" al posto di un percorso che scombina non appena mi sono su un altra pagina risorsa perché il nome della risorsa viene messo PRIMA impostazioni/modificare

Thx

+0

prima dicci che percorsi hai provato – rubish

+0

modificato la mia domanda – Mexxer

risposta

16

seguito dovrebbe fare:

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

Se si utilizza /settings/edit direttamente in collegamento, non dovreste avere problemi con un altro nome risorsa viene anteposto a percorso. Tuttavia, senza la barra iniziale, ad esempio settings/edit potrebbe avere quel problema.

Il motivo per cui edit_settings_path non funziona potrebbe essere dovuto al fatto che non è stata dichiarata una route con nome. Devi usare l'opzione :as per definire con quale metodo genererai questo percorso/url.

+0

Grazie mille! Ho davvero dimenticato il/di fronte ad esso. Ho finito per usare la tua soluzione però :) – Mexxer

4

Se si desidera definire in modo esplicito il percorso, si può usare qualcosa di simile

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

Questa dichiarazione definisce che quando una richiesta GET viene ricevuto per l'impostazione/modifica, chiamare il SettingsController # metodo di modifica e che le opinioni può fare riferimento a questo link usando "edit_settings_path".

Prendere un po 'di tempo per leggere the Rails guide on routing. Spiega il routing meglio di qualsiasi altro riferimento là fuori.

Tenere presente anche l'attività rake routes, che elenca i dettagli di tutti i percorsi definiti nell'applicazione.

1

cambiare strada per

resources :settings 

e probabilmente solo di lavoro.

Problemi correlati