2012-09-24 55 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中的錯誤SubjectsController#創建

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') 

是什麼問題?

回答

0

無論是在應用程序在application.rb中(不推薦),或使用attr_accessible這樣 attr_accessible模型中的白名單中的屬性設置爲false config.active_record.whitelist_attributes:名稱,:等等

+0

我有需要更新到Rails 3.2的遺留應用程序白名單屬性設置爲false,但我仍然收到這個錯誤 – bbozo

0

確保按Alex的說明將Subject模型中通過控制器發送的屬性列入白名單。您的主體模型應如下所示:

class Subject < ActiveRecord::Base 
    attr_accessible :created_at 
end 

爲什麼? Rails最近要求(在security problem on Github之後)確保惡意用戶不會從前端發送不需要的屬性。假設你在User類上有一個:admin布爾型字段。如果沒有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 
相關問題