2016-11-01 13 views
5

私はbefore_actionsをたくさん持っているコントローラを持つアプリケーションで作業しています。それらのほとんどは、設定したインスタンス変数によって互いに接続されています。たとえば:複数のbefore_actionが不正なコードスタイルを呼び出していますか?

def first_action 
    @first_variable = Something.new 
end 

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

コントローラは、次のようになります。

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 

それは、ビューの鉱山の点から理解することは本当に難しいです。これらのメソッドのそれぞれにはたくさんのコードがあります。さらに、このコントローラを継承し、その動作の一部またはすべてを使用するコントローラもあります。

私はそれがそれぞれの方法でロードされた変数について明示する方が良いですが、このことを聞いた:

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 

があまり良く見えません。読みやすくするためにそれをリファクタリングする方法はありますか?それとも、私は現在のソリューションに固執すべきですか?

+0

複数の 'before_actions'を持つことに何も問題はありませんが、1つのアクションにまとめられるケースがあるようです。 – Matt

+0

あなたのアイデア@Mattありがとうございました。あなたがそれを私の問題の解決策として確認できる答えとして追加した場合:) – zeth

+0

完了、助けてくれることをうれしく思います! – Matt

答えて

1

のように使用することができますか?

8

現在のソリューションは問題ありません。しかし、それはあなたが彼らが1つの行動に収集できた場合を持っているより多くのように見える - あなたはそこに何も複数before_actionsを有する間違っていない

before_action :first_action, :second_action, :third_action, :fourth_action, :fifth_action, :sixth_action, :seventh_action, only: [:index, :show, :create] 
関連する問題