2012-09-24 3 views
1
Can't mass-assign protected attributes: created_at(2i), created_at(3i), created_at(1i), created_at(4i), created_at(5i) 

내 코드는 다음과 같습니다 작성 :ActiveModel :: MassAssignmentSecurity :: 오류

def new 
    @subject = Subject.new(:name => 'default') 
    @subject_count = Subject.count + 1 
end 

def create 
    # Instantiate a new object using form parameters 
    @subject = Subject.new(params[:subject]) 
    # Save the object 
    if @subject.save 
    # If save succeeds, redirect to the list action 
    flash[:notice] = "Subject created." 
    redirect_to(:action => 'list') 
    else 
    # If save fails, redisplay the form so user can fix problems 
    @subject_count = Subject.count + 1 
    render('new') 

문제가 무엇인가? application.rb (권장하지 않음) 또는 attr_accessible로 attr_accessible 사용하여 모델의 화이트리스트 속성에서 false로 응용 프로그램에서

답변

0

하나 세트 config.active_record.whitelist_attributes : 이름 : 등등 ...

+0

나는 3.2 레일을 업데이트 할 필요가 레거시 응용 프로그램에서 false로 화이트리스트 특성을 가지고 있지만, 이 오류가 계속 발생합니다. – bbozo

0

것이 있는지 확인 Alex가 설명한대로 Subject 모델의 컨트롤러를 통해 전송 된 속성을 허용 목록에 추가합니다. 주제 모델은 다음과 같아야합니다.

class Subject < ActiveRecord::Base 
    attr_accessible :created_at 
end 

왜? Rails는 최근에 (security problem on Github 이후) 악성 사용자가 프론트 엔드에서 원치 않는 속성을 보내지 않도록합니다. User 클래스에 : admin boolean 필드가 있다고 가정합니다. attr_accessible이 없으면 다른 사람이 양식에 <input type="checkbox" name="user[admin]" value="true" checked>과 같은 새 필드를 추가 할 수 있습니다.이 필드를 사용하면 응용 프로그램에 관리자 권한을 부여 할 수 있습니다.

Sidenote ... HTML 양식에서 created_at 날짜를 설정할 필요가 없습니다. ActiveRecord는 :created_at:updated_at을 자동으로 관리합니다 (물론 어떤 이유로 든 수동으로 설정하려는 경우는 제외). 당신의 지배를받는 모델에서
모두가 당신과 같은 양식에 사용되는 속성을 추가

2

당신이 시도 할 수 있습니다,

class Subject < ActiveRecord::Base 
    attr_accessible :name, :created_at 
    ... 
    ... 
end 
관련 문제