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
:ify:unless, que pueden tomar un símbolo, una cadena, unProco 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.