2011-09-08 9 views
0

어떻게 다음 예에서와 같이 객체로 전달 PARAMS 제외 (또는 명시 적으로 포함) 할 수 있습니다Rails가 객체에 전달하는 매개 변수를 제한하는 방법은 무엇입니까?

def create 
    @something = Something.new(params[:something]) 
    ... 
    @something.save  
    end 

말 예를 something을 위해 허용되는 공용 사용자 (을 통해 설정할 안 필드 trust_level했다 객체 생성). 제공된 양식에 포함되지 않은 경우에도이 필드를 HTTP를 통해 쉽게 보낼 수 있습니다. 그렇다면이 필드가 new (또는 update_attributes) 메소드로 전달되는 것을 어떻게 방지 할 수 있습니까?

답변

4

attr_accessible을 사용하여 질량 할당에 사용할 수있는 것을 정의하십시오.

는 (다시 그래서 여기, 그건 link to the docs입니다하지만 말할 조금 어렵습니다.)

+1

는, 당신은 또한'attr_protected' 클래스의 방법을 사용할 수 있습니다. –

+1

피할 몇 가지가 있다면, 좋은 지적입니다. –

1

또 다른 방법은 filter out unwanted PARAMS이다. 특정 매개 변수 만 없애고 attr_accessible (문제에 대한 더 나은 해결책)을 사용할 수없는 경우를 대비하여.

hsh.reject {| key, value | block } → a_hash 
Hash#delete_if과 동일

, 만에 작동 (반환)이 HSH의 사본. hsh.dup.delete_if와 동일합니다. 화이트리스트는 블랙리스트보다 안전하지만 당신이 아니라 단지 대량 할당에서 특정 필드를 제외하려는 경우

enum.reject {| obj | block } → array 
enum.reject → an_enumerator 
관련 문제