[RUBY-ON-RAILS] "경고 : 수 대량 할당하지 보호 속성"
RUBY-ON-RAILS"경고 : 수 대량 할당하지 보호 속성"
나는 (사실, 나도 이유를 수행 고안 보석을 사용하고 있습니다) 모델을 생성하기 위해 편안하고 기술을 사용하고, 나는 모델에 FIRST_NAME과 LAST_NAME라는 새 필드를 추가했습니다. 마이그레이션 벌금을했다. 모델에 LAST_NAME을하고 그냥 일을 것이라고 예상 : FIRST_NAME : 나는 attr_accessor를 추가했다. 내가 Doctor.create ({: FIRST_NAME => "MyName로"})와 대량 할당 새로운 인스턴스를 시도 할 때 말하는 등, 내가 점점 오전 오류가 난 못해 대량 할당 보호 속성 수 있습니다.
나는 attr_accessor를 사용하는 전적인 이유는 모델의 필드의 protectedness를 해결하기 위해 생각했다. 날이 메시지의 의미를 도와 드릴까요?
편집 : 아, 그리고 방법에 의해 레코드가 하나 생성되지 않습니다. 나는이 그냥 경고이기 때문에 그들이해야한다 생각하지만, 데이터베이스에 없습니다.
EDIT2 : 여기에 내 모델입니다
class Doctor < User
has_many :patients
has_many :prescriptions, :through=> :patients
validates_presence_of :invitations, :on => :create, :message => "can't be blank"
attr_accessor :invitations
end
그들이 의사의 조상 인 사용자 테이블에서 생성되기 때문에 FIRST_NAME과 LAST_NAME이없는 스키마. 나는 하나의 테이블 상속을 사용했다.
create_table :doctors do |t|
t.integer :invitations
t.timestamps
end
이것은 사용자 테이블을 변경할 수있는 마이그레이션입니다
add_column :users, :first_name, :string
add_column :users, :last_name, :string
add_column :users, :type, :string
편집 : 여기에 시드 파일입니다. 나는 truncate_db_table 방법을 포함하고 있지 않다, 그러나 그것은 작동합니다.
%w{doctors patients}.each do |m|
truncate_db_table(m)
end
Doctor.create(:invitations=>5, :email=>"email@gmail.com", :first_name=>"Name", :last_name=>"LastName")
Patient.create(:doctor_id=>1, :gender=>"male", :date_of_birth=>"1991-02-24")
해결법
-
==============================
1.attr_accessible하지 혼동 attr_accessor를 수행합니다. 접근은 루비에 내장 getter 메소드를 정의한다 - model_instance.foo 번호를 반환 뭔가를 - 그리고 setter 메소드 - model_instance.foo = '바'.
attr_accessible하지 혼동 attr_accessor를 수행합니다. 접근은 루비에 내장 getter 메소드를 정의한다 - model_instance.foo 번호를 반환 뭔가를 - 그리고 setter 메소드 - model_instance.foo = '바'.
액세스는 레일에 의해 정의되고 (attr_protected의 반대 않음) 속성 대량 할당하게된다.
FIRST_NAME이 모델의 데이터베이스 테이블의 필드의 경우, 레일은 이미 속성에 대한 getter와 setter를 정의하고있다. FIRST_NAME : 당신이해야 할 모든 attr_accessible를 추가합니다.
-
==============================
2.생산 모드에 전혀 맞지 안전하지 않은 방식으로 앱 함께 해킹하려면 :
생산 모드에 전혀 맞지 안전하지 않은 방식으로 앱 함께 해킹하려면 :
당신이 찾아 볼 수있는 곳 끝으로 스크롤을 아래로 /config/application.rb로 이동
{config.active_record.whitelist_attributes = true}
false로 설정합니다.
EDIT / BTW (11 주 워크샵을 포함 루비 집약적 인 작업을 4 개월 만) : DHH가 믿고, noobies (그의 말) "및 실행"를 "매우 안전"보다 더 중요하다.
통보 : A는 경험이 풍부한 레일의 많은 개발자들이 매우 열정적에 대한 당신이이 일을하고 싶지 않다 생각합니다.
최신 정보: 삼년 후,이 작업을 수행하는 또 다른 방법은 - 당신은 각 모델을 위해 그것을하기 때문에 다시, 아마 위의 솔루션보다 더 나은 보안,하지만
class ModelName < ActiveRecord::Base column_names.each do |col| attr_accessible col.to_sym end ... end
-
==============================
3.여기 attr_accessor 사용하지 마십시오. 액티브 모델에 자동으로 사람을 만듭니다. 검증 또는 대량 할당 오류가 발생하는 경우 또한, 액티브는 레코드를 생성하지 않습니다.
여기 attr_accessor 사용하지 마십시오. 액티브 모델에 자동으로 사람을 만듭니다. 검증 또는 대량 할당 오류가 발생하는 경우 또한, 액티브는 레코드를 생성하지 않습니다.
편집 : 당신은 의사 테이블이 필요하지 않습니다, 당신은 레일 단일 테이블 상속을 처리하는 유형의 열이있는 사용자 테이블이 필요합니다. 초대장은 사용자 테이블에있을 것입니다. 아, 난 당신이 사용자에 대한 유형이 어떻게 당신의 추가 코드 샘플을 참조하십시오. 사용자에게 이상, 의사 테이블의 이동 초대를 제거하고 난 당신이 확인해야한다고 생각하기. 또한 attr_accessor 제거. 필요하지 않습니다.
STI는 특정 모델의 모든 클래스와 서브 클래스가 같은 테이블을 사용 레일 명심하십시오. 의사의 기록은 모두 '의사'의 형태로 사용자 테이블에서 행이 될 것입니다
편집 : 또한, 당신은 당신이 유일한 창조에 초대하지 업데이트의 유효성을 존재하겠습니까?
-
==============================
4.테이블 경로 파일에 변수 1, 변수 2 : attr_accessible를 추가합니다.
테이블 경로 파일에 변수 1, 변수 2 : attr_accessible를 추가합니다.
-
==============================
5.@Robert Speicher의 대답에 동의하지만, 난 강력하게 당신은 질량 asignment로부터 보호하기 위해 attr_accessible 대신 강력한 매개 변수를 사용하는 것을 권장합니다.
@Robert Speicher의 대답에 동의하지만, 난 강력하게 당신은 질량 asignment로부터 보호하기 위해 attr_accessible 대신 강력한 매개 변수를 사용하는 것을 권장합니다.
건배!
-
==============================
6.개별 통화 (그러나 전 세계적으로)에 대한 해제 대량 할당 보호하려면 : without_protection는 => 진정한 옵션을 사용할 수 있습니다. 키가 / 해시 값은 하드 코딩하거나 안전한 것으로 알려져 있습니다 어디 마이그레이션 및 기타 장소에 대한이 유용한를 찾을 수 있습니다.
개별 통화 (그러나 전 세계적으로)에 대한 해제 대량 할당 보호하려면 : without_protection는 => 진정한 옵션을 사용할 수 있습니다. 키가 / 해시 값은 하드 코딩하거나 안전한 것으로 알려져 있습니다 어디 마이그레이션 및 기타 장소에 대한이 유용한를 찾을 수 있습니다.
여기에 예 (레일에서 작동 3.2도) : https://apidock.com/rails/v3.1.0/ActiveRecord/Base/create/class
from https://stackoverflow.com/questions/3944288/warning-cant-mass-assign-protected-attributes by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 어떻게 고안를 사용하여 자신의 역할에 따라 사용자의 홈 (루트) 경로를 재 지정할 수 있습니다? (0) | 2020.02.29 |
---|---|
[RUBY-ON-RAILS] 들러 :: GemNotFound은 : 소스의에서 레이크 - 10.3.2 찾을 수 없습니다 (0) | 2020.02.29 |
[RUBY-ON-RAILS] 레일 3 잘못된 멀티 바이트 문자 (US-ASCII) (0) | 2020.02.29 |
[RUBY-ON-RAILS] 레일 3, 호환되지 않는 문자 인코딩에 루비 : UTF-8 및 국제화와 ASCII-8BIT (0) | 2020.02.29 |
[RUBY-ON-RAILS] 루비에 업로드 된 파일의 MIME 유형을 감지 (0) | 2020.02.29 |