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

问题是什么?

4

3 回答 3

2

您可以试试这个,
在您的主题模型中添加您在表单中使用的所有属性,例如,

class Subject < ActiveRecord::Base
  attr_accessible :name, :created_at
  ...
  ...
end
于 2012-11-14T12:38:27.570 回答
0

将应用程序中的 config.active_record.whitelist_attributes 设置为 application.rb 中的 false(不推荐)或使用 attr_accessible 将模型中的属性列入白名单,例如 attr_accessible :name, :etc...

于 2012-09-24T02:37:13.020 回答
0

Subject确保按照 Alex 的说明将通过模型中的控制器发送的属性列入白名单。您的主题模型应如下所示:

class Subject < ActiveRecord::Base
  attr_accessible :created_at
end

为什么?Rails 最近需要这样做(在 Github 上出现安全问题之后),以确保恶意用户不会从前端发送不需要的属性。假设您在 User 类上有一个 :admin 布尔字段。如果没有attr_accessible某人可以在表单中添加一个新字段,例如<input type="checkbox" name="user[admin]" value="true" checked>,这将赋予他对您的应用程序的管理权限。

旁注...您不需要从 HTML 表单中设置 :created_at 日期,ActiveRecord 会自动为您管理:created_at:updated_at(除非您出于某种原因想要手动设置它)。

于 2012-09-24T15:11:42.050 回答