복붙노트

[RUBY-ON-RAILS] 매개 변수 before_filter

RUBY-ON-RAILS

매개 변수 before_filter

나는이 같은 일을하는 방법이있다 :

before_filter :authenticate_rights, :only => [:show]

def authenticate_rights
  project = Project.find(params[:id])
  redirect_to signin_path unless project.hidden
end

내가 application_controller에 포함 된 도우미에 대한 방법을 복사 그래서 나는 또한, 다른 컨트롤러에이 방법을 사용하고 싶습니다.

ID 기호하지만 f.e. : 문제는 일부 컨트롤러에 프로젝트의 ID가 아니라고이다 :) 다른 모델 (ID 존재한다 : PROJECT_ID (도 A는

어떻게이 문제를 해결할 것인가? before_filter 액션에 매개 변수를 추가 할 수있는 옵션 (오른쪽 PARAM을 전달) 있는가?

해결법

  1. ==============================

    1.나는 이런 식으로 할 거라고 :

    나는 이런 식으로 할 거라고 :

    before_filter { |c| c.authenticate_rights correct_id_here }
    
    def authenticate_rights(project_id)
      project = Project.find(project_id)
      redirect_to signin_path unless project.hidden
    end
    

    어디 correct_id_here는 프로젝트에 액세스 할 수있는 관련 ID입니다.

  2. ==============================

    2.몇 가지 문법 설탕 :

    몇 가지 문법 설탕 :

    before_filter -> { find_campaign params[:id] }, only: [:show, :edit, :update, :destroy]
    

    또는 당신은 더 많은 공상을 얻을 것을 결정하는 경우 :

    before_filter ->(param=params[:id]) { find_campaign param }, only: %i|show edit update destroy|
    

    이 같이 쓸 수 있도록 그리고 레일 4 before_action, before_filter에 동의어 때문에, 도입 :

    before_action ->(param=params[:id]) { find_campaign param }, only: %i|show edit update destroy|
    

    NB

    -> 루비 1.9에 소개, 람다 문자라고, 람다 의미

    % 나 기호의 배열을 생성 할

  3. ==============================

    3.제외 또는 : 일부 방법, 여기에 구문은 당신이 원하는 경우, @ 알렉스 '대답을 계속하려면 :

    제외 또는 : 일부 방법, 여기에 구문은 당신이 원하는 경우, @ 알렉스 '대답을 계속하려면 :

    before_filter :only => [:edit, :update, :destroy] do |c| c.authenticate_rights params[:id] end 
    

    여기.

  4. ==============================

    4.내가 대신 할 일의 중괄호를 사용하여 블록 방법을 찾을 ... 끝은 깨끗한 옵션이 될 수 있습니다

    내가 대신 할 일의 중괄호를 사용하여 블록 방법을 찾을 ... 끝은 깨끗한 옵션이 될 수 있습니다

    before_action(only: [:show]) { authenticate_rights(id) }
    

    before_action before_filter은 단지 바람직한 새로운 구문

  5. ==============================

    5.이 작업을해야합니다 :

    이 작업을해야합니다 :

    project = Project.find(params[:project_id] || params[:id])
    

    [: ID]가 아닌 경우는 PARAMS 해시 또는 리턴 PARAMS에있는 경우 [PROJECT_ID]이 PARAMS를 반환한다.

  6. from https://stackoverflow.com/questions/5507026/before-filter-with-parameters by cc-by-sa and MIT license