rails examples ruby-on-rails ruby routes ruby-on-rails-4 sti

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