rails only new method create before_action and ruby-on-rails-4 before-filter

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, un Proc o una Array .

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.