rails only new mvc method create before and ruby-on-rails inheritance before-filter

ruby-on-rails - only - ruby on rails mvc



Omitir before_filter en Rails (4)

Las dos respuestas dadas son a medias correctas. Para evitar que todas las acciones de tu perro se abran, debes calificar skip_before_filter para aplicar solo a la acción ''mostrar'' de la siguiente manera:

class Dog < Animal skip_before_filter :authenticate, :only => :show end

Los nombres y objetos se han simplificado por motivos de claridad. El concepto básico sigue siendo el mismo.

Tengo tres controladores: dog , cat y horse . Todos estos controladores heredan del animal controlador. En el animal controlador, tengo un filtro anterior que autentica a un usuario como tal:

before_filter :authenticate def authenticate authenticate_or_request_with_http_basic do |name, password| name == "foo" && password == "bar" end end

En la acción show de dog , necesito tener acceso abierto a todos los usuarios (omita la autenticación).

Si tuviera que escribir la autenticación por separado para el dog , podría hacer algo como esto:

before_filter :authenticate, :except => :show

Pero dado que el dog hereda de un animal , no tengo acceso a las acciones específicas del controlador. Agregar :except => :show en el controlador de animal no solo omitirá la autenticación para show acción de un dog , sino también la de cat y horse . Este comportamiento no es deseado.

¿Cómo puedo omitir la autenticación solo para show acción del dog mientras sigo heredando de un animal ?


Para esto puedes usar skip_before_filter

Se explica en la API de Rails

En tu ejemplo, el dog solo debería contener

skip_before_filter :authenticate


Solo una pequeña actualización que usa rails 4, ahora es skip_before_action :authenticate, :only => :show y que before_filters debería usar before_action en before_action lugar.