2016-11-01 9 views
5

Pracuję nad aplikacją z kontrolerem, który ma wiele elementów before_actions. Większość z nich jest połączona ze sobą za pomocą ustawionych przez siebie zmiennych instancji. Na przykład:Czy wiele odwołań before_action wywołuje zły styl kodu?

def first_action 
    @first_variable = Something.new 
end 

def second_action 
    if @first_variable 
    @second_variable = Other.new 
    end 
end 

Kontroler wygląda następująco:

class ExampleController < ApplicationController 
    before_action :first_action, only: [:index, :show, :create] 
    before_action :second_action, only: [:index, :show, :create] 
    before_action :third_action, only: [:index, :show, :create] 
    before_action :fourth_action, only: [:index, :show, :create] 
    before_action :fifth_action, only: [:index, :show, :create] 
    before_action :sixth_action, only: [:index, :show, :create] 
    before_action :seventh_action, only: [:index, :show, :create] 

    def index 
    # some code 
    end 

    def show 
    # some code 
    end 

    def create 
    # some code 
    end 

    private 

    # all of the before_action methods 
end 

To naprawdę trudno zrozumieć z punktu widzenia kopalni. Każda z tych metod zawiera dużo kodu. Dodatkowo istnieją kontrolery, które dziedziczą z tego, a także używają części lub wszystkich tych działań.

Słyszałem, że lepiej jest być jawne o załadowanych zmiennych w każdej metodzie, ale w ten sposób:

class ExampleController < ApplicationController 

    def index 
    first_action 
    second_action 
    third_action 
    fourth_action 
    fifth_action 
    sixth_action 
    seventh_action 
    # some code 
    end 

    def show 
    first_action 
    second_action 
    third_action 
    fourth_action 
    fifth_action 
    sixth_action 
    seventh_action 
    # some code 
    end 

    def create 
    first_action 
    second_action 
    third_action 
    fourth_action 
    fifth_action 
    sixth_action 
    seventh_action 
    # some code 
    end 

    private 

    # all of the before_action methods 
end 

nie wygląda dużo lepiej. Czy istnieje sposób na refaktoryzację w celu uzyskania większej czytelności, czy powinienem trzymać się obecnego rozwiązania?

+0

Nie ma nic złego w posiadaniu wielu 'before_actions' - ale wygląda na to, że masz przypadek, w którym można je zebrać w jedną akcję? – Matt

+0

Poszedłem z twoim pomysłem @Matt Dzięki i jeśli dodasz go jako odpowiedź, mogę to sprawdzić jako rozwiązanie mojego problemu :) – zeth

+0

Zrobione, cieszę się, że to pomogło! – Matt

Odpowiedz

1

Nie ma nic złego w wielu before_actions - ale wygląda bardziej jak masz przypadek, w którym mogą one być zebrane w jednej akcji?

8

Twoje obecne rozwiązanie jest w porządku. Można używać jak

before_action :first_action, :second_action, :third_action, :fourth_action, :fifth_action, :sixth_action, :seventh_action, only: [:index, :show, :create] 
Powiązane problemy