2012-06-17 25 views
6

Me cuesta mucho entender las rutas y espero que alguien me pueda ayudar.Rieles: ruta a la acción del controlador personalizado

Aquí está mi controlador personalizado

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 

y tengo la configuración del archivo/edit.html.erb y mi enlace

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

La ruta

get "settings/edit" 

no funciona para esto, porque entonces obtengo

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

¿Qué ruta debo dar? No puedo resolverlo. Si pongo "/ configuración/edición" en lugar de un camino ya que se rompe tan pronto como estoy en una otra página de recursos debido a que el nombre de recurso se presenta ante los ajustes/editar

Thx

+0

primero cuéntanos qué rutas has probado – rubish

+0

editado mi pregunta – Mexxer

Respuesta

16

siguiente debe hacer:

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

Si utiliza /settings/edit directamente en el enlace, que no debería tener problemas con otro nombre de recurso que se antepone en el camino. Sin embargo, sin la barra diagonal, es decir, settings/edit, podría tener ese problema.

La razón por la cual edit_settings_path no funciona podría deberse a que no declaró una ruta con nombre. Debe utilizar la opción :as para definir por qué método va a generar esta ruta/url.

+0

¡Muchas gracias! Realmente olvidé el/delante de él. Terminé usando tu solución :) – Mexxer

4

Si desea definir explícitamente la ruta, se usaría algo así como

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

Esta declaración define que cuando una petición GET se recibe para el ajuste/editar, llame al editar forma de SettingsController #, y que vistas puede hacer referencia a este enlace usando 'edit_settings_path'.

Tómese su tiempo para leer the Rails guide on routing. Explica el enrutamiento mejor que cualquier otra referencia por ahí.

También tenga en cuenta la tarea rake routes, que enumera los detalles de todas las rutas definidas en su aplicación.

1

cambiar la ruta para

resources :settings 

y probablemente sólo el trabajo.

Cuestiones relacionadas