Can't mass-assign protected attributes: created_at(2i), created_at(3i), created_at(1i), created_at(4i), created_at(5i)
我的代码如下:
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 :(得分:2)
你可以试试这个,
在您的主题模型中添加您在表单中使用的所有属性,例如
class Subject < ActiveRecord::Base
attr_accessible :name, :created_at
...
...
end
答案 1 :(得分:0)
使用attr_accessible将应用程序中的config.active_record.whitelist_attributes设置为application.rb(不推荐)中的false或模型中的白名单属性 attr_accessible:name,:etc ......
答案 2 :(得分: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
(除非您想手动设置它)当然有些原因。)