ruby-on-rails - routes rails examples
Rutas, ayudantes de ruta y STI en Rails 4.0 (2)
¡Esto me está volviendo loca! Tengo los dos modelos Lion
y Cheetah
. Ambos heredan de Wildcat
.
class Wildcat < ActiveRecord::Base; end
class Lion < Wildcat; end
class Cheetah < Wildcat; end
STI se usa aquí.
Todos se manejan a través del controlador WildcatsController
. Allí, tengo un before_filer
para obtener el type
de wildcat de los params[:type]
y todas las demás cosas para usar la clase correcta.
En mi routes.rb
, creé las siguientes rutas:
resources :lions, controller: ''wildcats'', type: ''Lion''
resources :cheetahs, controller: ''wildcats'', type: ''Cheetah''
Si ahora quiero usar los helpers de rutas, que obtengo de las rutas ( lions_path
, lion_path
, new_lion_path
, etc.), todo está funcionando como se esperaba, excepto el show
y las new
rutas. Por ejemplo, lions_path
devuelve el camino /lions
. La new
ruta devuelve /lions/new?type=Lion
. Lo mismo con la ruta del show
. Cuando trato de ingresar /lions/new
a mi dominio raíz, agrega correctamente el tipo param en el fondo.
Entonces, mi pregunta es, ¿por qué Rails agrega el parámetro type
a la url si uso el helper path? ¿Y por qué solo para new
y show
?
Estoy ejecutando Rails 4.0.0 con Ruby 2.0 usando una nueva aplicación de Rails.
¿Por qué usar el type
? ¿Por qué no usar controladores heredados?
resources :lions
resources :cheetahs
Entonces
class LionsController < WildCatsController
end
class CheetahController < WildCatsController
end
class WildCatsController < ApplicationController
before_filter :get_type
def index
@objs = @klass.scoped
end
def show
@obj = @klass.find(params[:id])
end
def new
@obj = @klass.new
end
# blah blah
def get_type
resource = request.path.split(''/'')[0]
@klass = resource.singularize.capitalize.constantize
end
acabo de tener este problema. Podría intentar apagar el servidor, eliminar el directorio / tmp y reiniciar.