2011-02-02 4 views
2

내가 비계를 생성하면 표준 액션 인덱스 new, show, create ....가 모두 라인을 포함합니다. 같은 컨트롤러에서 생성 된 액션 코드를 리팩토링하는 경우

@comment = Comment.find(params[:id]) 

는 이것이 장점이다 감각

def load 
@comment = Comment.find(params[:id]) 
end 

같은 컨트롤러에 별도의 방법이 줄을 추가 할 수 있도록 하는가? 당신의 시간에 대한 Thx

답변

2

별도의 방법은 가능하고 before_filter를 사용하려면 예.

class CommentsController < ApplicationController 
    # Whitelist your before_filter like this. Or you can blacklist it with :except => [] 
    before_filter :load_comment, :only => [:edit, :update, :destroy, :show] 

    def show 
    end 

    def index 
    @comments = Comment.all 
    end 

    def new 
    @comment = Comment.new 
    end 

    # etc ... 

    protected 

    def load_comment 
    @comment = Comment.find(params[:id]) 
    end 
end 
+0

안녕하세요. 왜 보호 받습니까? 내 액션에서 '@comment = Comment.new'와 같은 쿼리가 이미 다른 경우에는 어떻게 될까요? before_filter가 재정의합니까? 액션 메서드 앞에 또는 컨트롤러 끝 부분에 메서드를 넣을 수 있습니까? – daniel

+0

필터를 화이트리스트에 등록하는 방법에 대해서는 필자의 편집을 참조하십시오. 왜 보호 받는지. 공개 된 것이고 적절한 경로를 잡았다면'load_comment'는 일반적인 컨트롤러 동작으로 호출 할 수 있습니다. 그것은 단지 예방책입니다. – jdl

+0

thx jdl. 좋은 물건 – daniel

관련 문제