Mam następujący kod:
class SupportsController < ApplicationController
before_action :set_support, only: [:show, :edit, :update, :destroy]
....
Czy jest możliwe przekazanie ciągu znaków do metody, set_support
która ma być zastosowana dla wszystkich 4 metod widoku? Czy można przekazać do metody inny ciąg znaków set_support
dla każdej metody w widoku?
before_action only: [:show, :edit, :update, :destroy] do |c| c.set_support(params[:action) end
Możesz użyć lambdy:
class SupportsController < ApplicationController before_action -> { set_support("value") }, only: [:show, :edit, :update, :destroy] ...
źródło
Krótka i jednowierszowa odpowiedź (którą osobiście preferuję w przypadku połączeń zwrotnych ) to:
before_action except:[:index, :show] { method :param1, :param2 }
Inny przykład:
after_filter only:[:destroy, :kerplode] { method2_namey_name(p1, p2) }
źródło
Możesz przekazać lambdę do
before_action
i przekazaćparams[:action]
doset_support
metody w następujący sposób:class SupportsController < ApplicationController before_action only: [:show, :edit, :update, :destroy] {|c| c.set_support params[:action]} ....
Następnie param wysyłany jest jednym z ciągów:
'show'
,'edit'
,'update'
lub'destroy'
.źródło
Plik SupportsController
class SupportsController < ApplicationController before_action only: [:show, :edit, :update, :destroy] { |ctrl| ctrl.set_support("the_value") } ...
ApplicationController
class ApplicationController < ActionController def set_support (value = "") p value end ...
źródło