100 votes

Rails 4 before_action, transmettre des paramètres à la méthode invoquée

J'ai le code suivant :

class SupportsController < ApplicationController
  before_action :set_support, only: [:show, :edit, :update, :destroy]
  ....

Est-il possible de passer une chaîne de caractères à la méthode set_support pour l'appliquer à toutes les 4 méthodes de vue ? Est-il possible de passer une chaîne de caractères différente à la méthode set_support pour chaque méthode de vue ?

190voto

Oleander Points 2978
before_action only: [:show, :edit, :update, :destroy] do
  set_support("valeur")
end

64voto

kyledecot Points 1749

Vous pouvez utiliser une lambda :

class SupportsController < ApplicationController
  before_action -> { set_support("value") }, 
    only: [:show, :edit, :update, :destroy]
  ...

13voto

cb24 Points 519

Une réponse courte et succincte (que je préfère personnellement pour les callbacks) est :

before_action except:[:index, :show] { method :param1, :param2 }

Un autre exemple :

after_filter only:[:destroy, :kerplode] { method2_namey_name(p1, p2) }

5voto

tihom Points 6812

Vous pouvez passer une lambda à la before_action et passer params[:action] à la méthode set_support de cette manière :

class SupportsController < ApplicationController
  before_action only: [:show, :edit, :update, :destroy] {|c| c.set_support params[:action]}
  ....

Ensuite, le paramètre envoyé est l'une des chaînes : 'show', 'edit', 'update' ou 'destroy'.

0voto

Darlan Dieterich Points 168

Le SupportsController

class SupportsController < ApplicationController    
  before_action only: [:show, :edit, :update, :destroy] { |ctrl|
    ctrl.set_support("the_value")
  }
...

Le ApplicationController

class ApplicationController < ActionController
  def set_support (value = "")
    p value
  end
...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X