ruby-on-rails-4 - only - routes in ruby on rails
¿Se requiere "proc" condicional before_action/before_filter? (3)
Desde Rails 5.2 en adelante, la respuesta aceptada actual ya no será válida, y pasar una cadena al condicional fallará.
ADVERTENCIA DE DEPRESIÓN: pasar la cadena a: if y: a menos que las opciones condicionales estén en desuso y se eliminarán en Rails 5.2 sin reemplazo.
En el futuro, un proceso es la mejor manera de agregar un tipo condicional en la pregunta original:
class ThingController < ApplicationController
before_action :check_stuff, :if => proc {Rails.env.production?}
end
He aquí, un before_filter
:
class ThingController < ApplicationController
before_filter :check_stuff, :if => proc {Rails.env.production?}
end
Durante una reciente revisión del código, me preguntaron, "¿Se requiere el proceso para que esto funcione?" La respuesta parece ser ''sí'', pero es una pregunta razonable, y tenía la intención de responderla consultando los documentos o guías de Rails o algo sobre el uso de condicionales con before_filter
(ahora un alias de before_action
).
No pude encontrar ninguno. La Guía del controlador de acción menciona :only
/ :except
, but not :if
/ :unless
.
En su defecto, ¿hay algún lugar en el código que pueda señalar que lo cubra? Se menciona brevemente here , pero se trata más de cómo :only
y :except
se manejan, en lugar de :if
o :unless
.
He hecho esto en mi código hace tiempo. Espero que ese ejemplo te ayude. Si puede usar la instrucción if, pero eso debería apuntar a otro método como lo hice aquí.
class Admin::ArticlesController < ApplicationController
before_filter :deny_access, :unless => :draft_and_admin?
def show
@article = Article.find(params[:id])
end
protected
def draft_and_admin?
Article.find(params[:id]).draft? && current_user.admin?
end
end
Lo encontré en Rails Guides: http://guides.rubyonrails.org/active_record_callbacks.html#conditional-callbacks
Resulta que no siempre se requiere un Proc
para que funcione.
las opciones
:if
y:unless
, que pueden tomar un símbolo, una cadena, unProc
o unaArray
.
Entonces, en su caso, probablemente podría salirse con la suya
before_action :check_stuff, if: "Rails.env.production?"
Encontrar cosas en la documentación de Rails puede ser problemático a veces, pero al menos preguntas como esta hacen que las cosas sean más fáciles de encontrar a lo largo del tiempo, ya que está bien indexado y tiene una alta clasificación de búsqueda.