2012-06-13 5 views
2

다음 개발자 the ruby on rails guide 개발자는 보호 된 필드를 대량 할당 할 수는 없지만 예외를 시도하지는 않습니까? rails 응용 프로그램에서 new 방법을 통해 하지만 내 경우 대량 할당에서 다른 PARAMS :레일 : MassAssignmentSecurity :: Error

@edition = Edition.new params[:edition] 

인상 다음과 같은 예외 :

ActiveModel::MassAssignmentSecurity::Error: Can't mass-assign protected attributes: price 

이유는 무엇입니까? 내가 잘못 알고 있니? 대량 할당 예외를받지 않는 방법입니까? 배정에서 보호 속성을 해시에서 삭제하는 것은 편리하지 않습니다.

업데이트 : 에디션 모델 :

class Edition < ActiveRecord::Base 
    attr_accessible :title, :description 
    attr_protected :price 
end 

params[:edition].inspect : 당신은을 즉

@edition = Edition.new params[:edition] 

을 넣어 대량 할당의 보호 속성 가격을 지정하려는

{"title"=>"t", "description"=>"d", "price"=>"123"} 
+0

모델에'attr_accessible'이 있습니까? –

+0

예,'attr_accessible' 필드와'attr_protected'''price' 필드 만 있습니다. – tiktak

+0

attr_protected에서 제거하십시오. attr_accessible에 없으면 대량 할당되지는 않지만 예외는 더 이상 발생하지 않아야합니다. –

답변

3

변수의 대량 할당과 매개 변수 [: ed ition] 귀하의 편집에 따르면, 귀하의 코드에 따라 대량 할당 할 수없는 가변 가격이 있습니다.

이 문제를 해결하려면 원하지 않는 가격으로 보호 기능을 제거하거나 보호되지 않은 변수 만 대량으로 할당 한 다음 보호 된 변수를 할당해야합니다. SO :

@edition = Edition.new params[:edition].except("price") 
    @edition.price = params[:edition]['price'] 

또는 @edition = Edition.new params[:edition], :without_protection => true

편집 : news.ycombinator.com/item?id=3780963 지금 3.23 레일이 예외가 발생 기본적으로 엄격한 검증을합니다. 문서가 오래되었습니다.

+0

괜찮지 만, 레일즈 가이드의 루비 예제는 어떻게 될까요? 질문의 맨 위에있는 링크를 찾을 수 있습니다. 그들은 어떤 제거도하지 않습니다. – tiktak

+0

그래, 그들은 통과 : 그것과 함께 without_protection. 문제의 핵심은 여전히 ​​동일합니다. 보호 된 변수를 대량 할당하려고합니다. 또한 : with_protection을 사용하여 검사를 무시할 수도 있습니다. 대량 할당 보호의 목적은 누군가가 REST 호출에서 User.update (params)를 수행하는 것을 피하고 침입자가 패스워드를 업데이트하려는 의도가있을 때 admin => true를 전달하도록하는 것입니다. –

+0

여기서 중요한 점은 대량 할당의 보안 위험을 이해하고 왜이 문제가 있는지 알아야한다는 것입니다. 도움을 주셔서 감사합니다. –

관련 문제