1

로컬 변수 인 것처럼 'params'해시에서 개별 키 - 값 쌍에 액세스해야하는 경우가 종종 있습니다.params hash에서 값에 액세스하는 약식

매번 '매개 변수'를 쓰는 대신 로컬 변수를 사용하면 코드를 더 쉽게 이해할 수 있습니다.

그래서 대신 내가 좋아하는 일을 할 것 params[:first_variable] 같은 값을 사용하여 :

first_var = params[:first_variable] 

second_var = params[:second_variable] 
... 

내 프로그램에 내가 대신 params[:first_var]마다 쓰는이 짧은 표기법을 사용합니다.

이 문제는 params에 값이 많은 경우 함수의 크기가 크게 커질 수 있다는 점입니다.

'params'의 개체를 내 함수의 로컬 변수로 참조하는 더 좋은 방법이 있습니까?

+0

몇 가지 코드로 설명 할 수 있습니까? 컨트롤러는 펑키 한 일을해서는 안됩니다. 일반적으로 매개 변수 해시를 가져 와서 다른 사람에게 넘기면 컨트롤러에 많은 로컬 변수를 정의 할 필요가 없습니다. 그것이하는 일보다 훨씬 더 많이하고 있습니다. –

+0

http://www.stephenchu.com/2008/03/paramfu-1-wrap-all-revantvant-attributes.html – Sector

+0

이렇게하면 누군가에게 완전히 설명하지 않고도 코드를 더 쉽게 이해할 수 있다고 생각하지 않습니다. 프로젝트 참여 (?). 그러나 이것은 단지 겸손한 의견 일뿐입니다. –

답변

2

method_missing에이 기능을 원하는 클래스를 다시 정의하십시오. 그럴 경우 기본 규칙 인 method_missing을 기억하십시오. 처리 할 수없는 경우 전화를 걸어 (super); respond_to?을 병렬로 업데이트하십시오.

아마도 이와 같은 것일 수 있습니다.

class Foo 
    def method_missing(name, *args, &block) 
    if params.include? name 
     params[:name] 
    else 
     super 
    end 
    end 

    def respond_to?(name) 
    if params.include? name 
     true 
    else 
     super 
    end 
    end 
end 

그러니 단지 자신의 클래스 또는 별칭 기존 버전에 다시 정의하고 처리하지 않을 때 super 대신 그 전화, 레일 이미 method_missing를 많이 사용하게 기억하십시오.

+2

+1하지만 params의 변수 이름에 따라 위험 할 수 있습니다. – apneadiving

+0

그렇게하지 마십시오. 우리는 PHP의 register_global에서 더 잘 배웠습니까? http://www.php.net/manual/en/ini.core.php#ini.register-globals – remino

관련 문제