Forum: Rails-ES Obtener nombre del recursos

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Borja Martín (Guest)
on 2008-11-25 21:16
(Received via mailing list)
Buenas,
¿sabe alguien cómo podría obtener el nombre del recurso a partir del
request?
Es decir, si en el routes.rb tengo algo parecido a esto

map.resources :pages, :controller => 'documents'

y hago una petición a /pages/ se llamará al método index de
DocumentsController y querría saber si hay alguna maner de obtener el
nombre del recurso que se está solicitando, que es Page en este caso(o
pages).
Sé que podría sacarlo a partir de la URI, pero en el momento en que me
metan un ':as' en la definición del recurso ya no me vale:

map.resources :pages, :controller => 'documents', :as => 'paginas'

La llamada sería a /paginas/ pero el recurso seguiría siendo :pages
No sé si me explico...
Estuve mirando la clase ActionController::Routing::Routes pero no
encontré nada...

Muchas gracias

Saludos

/**
 * dagi3d v4 - http://dagi3d.net
 */
Jose Antonio P. (Guest)
on 2008-11-26 21:16
 Hola Borja,

  Prueba con la funcion controller.controller_name. Esta te devuelve el
nombre del controlador. Con controller.action_name te devolveria el
nombre de la accion que se está llamando en ese momento.
Borja Martín (Guest)
on 2008-11-26 23:06
(Received via mailing list)
Hola Jose Antonio,
el caso es que no es esto lo que busco ya que no necesito saber el
nombre
del controlador porque no tiene que ser necesariamente el nombre del
modelo.
El tema es que tengo dos tipos de recursos(que pueden ser más) que
quiero
servir desde un único controlador y para ello necesito obtener el nombre
del
recurso en cuestión y asi llamar a la clase correspondiente de manera
dinámica.
Sería algo parecido a esto:

map.resources :pages, :controller => 'documents'
map.resources :files, :controller => 'documents'

como ves, el nombre del controlador es :documents pero si yo quiero
obtener
el nombre del recurso, que será :pages o :files en función de donde
entren(y
como ya comenté, sacarlo a partir de la URI no me parece la opción más
razonable).

Supongo que una solución sería definir los recursos tal que así:
map.resources :pages
map.resources :files

y entonces las llamadas se harían a los controladores PagesController y
FilesController, que deberían heredar de DocumentsController donde
estaría
toda la chicha definida(y aquí que podría usar el método controller_name
por
ejemplo)

y supongo que otra más elegante sería hacer algo a modo de plugin que
asignase el nombre del recurso al controlador que se está utilizando.

Saludos


2008/11/26 Jose Antonio P. <removed_email_address@domain.invalid>
Sergio Cambra .:: entreCables - Symbol Servicios (Guest)
on 2008-11-28 10:25
(Received via mailing list)
El Wednesday 26 November 2008 22:06:29 Borja Martín escribió:
> map.resources :files, :controller => 'documents'
Con esto las urls seran exactamente iguales, por lo que es imposible
distinguirlos. Es mejor lo que dices más adelante de dos controladores
que
hereden de uno común.

> y entonces las llamadas se harían a los controladores PagesController y
> 2008/11/26 Jose Antonio P. <removed_email_address@domain.invalid>
> > removed_email_address@domain.invalid
> > http://lists.simplelogica.net/mailman/listinfo/ror-es



--
Sergio Cambra .:: entreCables - Symbol Servicios Informáticos S.L. ::.
Nicolás Guillén 6, locales 2 y 3. 50.018 Zaragoza
T) 902 021 404 F) 976 52 98 07 E) removed_email_address@domain.invalid
Borja Martín (Guest)
on 2008-11-28 11:35
(Received via mailing list)
Hola Sergio,
te comento que las urls no serán iguales y no habrá ningún tipo de
ambigüedad(vamos, está comprobado). De hecho la generación de rutas
funciona perfectamente y cada una es distinta:

gambitero:rails-test dagi3d$ rake routes
(in /Users/dagi3d/www/rails-test)
              pages GET    /pages
{:action=>"index", :controller=>"documents"}
    formatted_pages GET    /pages.:format
{:action=>"index", :controller=>"documents"}
                    POST   /pages
{:action=>"create", :controller=>"documents"}
                    POST   /pages.:format
{:action=>"create", :controller=>"documents"}
           new_page GET    /pages/new
{:action=>"new", :controller=>"documents"}
 formatted_new_page GET    /pages/new.:format
{:action=>"new", :controller=>"documents"}
          edit_page GET    /pages/:id/edit
{:action=>"edit", :controller=>"documents"}
formatted_edit_page GET    /pages/:id/edit.:format
{:action=>"edit", :controller=>"documents"}
               page GET    /pages/:id
{:action=>"show", :controller=>"documents"}
     formatted_page GET    /pages/:id.:format
{:action=>"show", :controller=>"documents"}
                    PUT    /pages/:id
{:action=>"update", :controller=>"documents"}
                    PUT    /pages/:id.:format
{:action=>"update", :controller=>"documents"}
                    DELETE /pages/:id
{:action=>"destroy", :controller=>"documents"}
                    DELETE /pages/:id.:format
{:action=>"destroy", :controller=>"documents"}
              files GET    /files
{:action=>"index", :controller=>"documents"}
    formatted_files GET    /files.:format
{:action=>"index", :controller=>"documents"}
                    POST   /files
{:action=>"create", :controller=>"documents"}
                    POST   /files.:format
{:action=>"create", :controller=>"documents"}
           new_file GET    /files/new
{:action=>"new", :controller=>"documents"}
 formatted_new_file GET    /files/new.:format
{:action=>"new", :controller=>"documents"}
          edit_file GET    /files/:id/edit
{:action=>"edit", :controller=>"documents"}
formatted_edit_file GET    /files/:id/edit.:format
{:action=>"edit", :controller=>"documents"}
               file GET    /files/:id
{:action=>"show", :controller=>"documents"}
     formatted_file GET    /files/:id.:format
{:action=>"show", :controller=>"documents"}
                    PUT    /files/:id
{:action=>"update", :controller=>"documents"}
                    PUT    /files/:id.:format
{:action=>"update", :controller=>"documents"}
                    DELETE /files/:id
{:action=>"destroy", :controller=>"documents"}
                    DELETE /files/:id.:format
{:action=>"destroy", :controller=>"documents"}
                           /:controller/:action/:id
                           /:controller/:action/:id.:format

Saludos


Sergio Cambra .:: entreCables - Symbol Servicios Informáticos S.L. ::.
escribió:
Fernando C. (Guest)
on 2008-12-01 19:27
Yo tengo un controlador que maneja 11 clases. Hay una clase genérica
"producto", y de esa clase heredan las 11... todo guardado en la tabla
"Productos", y con un campo "type" para que Rails gestione la clase. Y
si quiero saber la clase de un producto, hago @producto.class.to_s y la
tengo.

En tu caso, supongo que Pages podría heredar de Documents, si añades una
columna "type" a Documents, y en vez de
class Page < ActiveRecord::Base
pones
class Page < Document

s2
Borja Martín (Guest)
on 2008-12-02 16:46
(Received via mailing list)
esa era una de mis soluciones pero no me terminaba de hacer mucha gracia
porque al final tenía controladores que solo usaba para 'configuración'
y además la cosa se complicaba con los recursos anidados.
otra solución era pasarle como parámetro de manera transparente el
nombre del recurso tal como comentan aquí(que justo era el mismo
problema que planteaba yo):

http://groups.google.ca/group/rubyonrails-talk/bro...

salud!

Fernando C. escribió:
> class Page < Document
>
> s2
>


--
/**
 * dagi3d v4 - http://dagi3d.net
 */
This topic is locked and can not be replied to.