2017-02-02 6 views
1

저는 Rails 5.0입니다. 새로운 컨트롤러를 생성하고 난 등개인 방법을 사용하여 건조 상태를 유지하는 방법?

private 

def find_post 
    @post = Posts.find(params[:id]) 
end 

def find_user 
    @user = User.find(params[:id]) 
end 

def find_group 
    ... 
end 

과 같이 각 클래스의 민간 부분에서 동일한 방법을 꽤 많이 가지고 있다는 것을 발견했습니다이 더 많은 코드를 추가.

"표준"개인용 메서드 집합을 필요로하는 모든 클래스에 포함시킬 수있는 방법이 있습니까?

+0

당신은 당신이 하나의 방법 –

+0

OK, 경우에 따라서는 수의 코드를 이동 할 수있는 작업과 이러한 모든 방법을 사용하여 생각하면 이해하지만, 여전히 많은 수업에서 반복됩니다. –

+0

@AlexanderGorg 컨트롤러 코드를 말아서이 방법이 다른 컨트롤러에서도 유용 할 경우 도우미를 만들 수 있으며 컨트롤러에 도우미를 포함시킬 수 있습니다. – ashvin

답변

2

모델에서와 같이 컨트롤러에서 concerns을 컨트롤러로 사용할 수 있습니다.

Finders 또는 그 무엇인가를 app/controllers/concerns/finders.rb에 정의한 다음 include Finders으로 정의하면됩니다.

또한 루비 이후 2.0 def 실제로 메소드 이름과 기호를 반환합니다, 그래서 다음과 같이 할 수 있습니다 :

private def find_post 
    @post = Posts.find(params[:id]) 
end 

private def find_user 
    @user = User.find(params[:id]) 
end 

가이 약간 더에 입력을 유도하는 것이 사실이지만, 그것의를 클래스 레벨 액세스 수정 자보다 더 명확하고 훨씬 적은 오류가 발생합니다.

+0

정말 멋지다! –

0

보호 된 방법 대신 상위 컨트롤러에서 상속 할 수 있습니까?

class PostParentController < ApplicationController 
    before_filter :find_user # might be a different method name in Rails 5 
    before_filter :find_post 

    protected 
    def find_post 
    @post = Posts.find(params[:id]) 
    end 

    def find_user 
    @user = User.find(params[:id]) 
    end 
end 

서브 클래스 :

class PostChildController < PostParentController 
    def show 
    end 

    def create 
    end 

    # etc 
end 

Ruby public, private, protected methods

+1

경우에 따라 결정이 내려 지지만 매우 다른 기능 (이미지, 비디오, 게시물 등)을 가진 공백이 있지만 사용자, 투표, 답변 등을 찾는 방법은 완전히 동일합니다. 나는 어떤 종류의 모듈이 필요하다는 것을 알았지 만, 이제 나는 걱정이 필요하다는 것을 확실히 알고있다! –