Rails 3.2 POST与AJAX创建MassAssignmentSecurity ::错误

时间:2012-06-21 16:47:55

标签: ruby-on-rails jquery ruby-on-rails-3.2

我有点笨蛋,我正在尝试搭载bokmann的rails3_fullcalendar来创建rails 3.2中的日历应用程序,但是当我尝试在我的应用程序中创建一个事件时,我收到此错误:

ActiveModel::MassAssignmentSecurity::Error in EventsController#create

Can't mass-assign protected attributes: title, description, starts_at(1i), starts_at(2i),
starts_at(3i), starts_at(4i), starts_at(5i), ends_at(1i), ends_at(2i), ends_at(3i), ends_at(4i),
ends_at(5i), all_day

{"utf8"=>"✓",
"authenticity_token"=>"bq3ZUXLm4lYbja9FUafbroFF2Zwt8iMw6GWfvoRuPLA=",
"event"=>{"title"=>"sddfsdf",
"description"=>"df",
"starts_at(1i)"=>"2012",
"starts_at(2i)"=>"6",
"commit"=>"Create Event"}

该解决方案看起来像it should be this,但是将AUTH_TOKEN传递给AJAX POST(它正在发送),但它仍然无效。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

如果您收到此异常,则您应该已经过身份验证,因此Auth_token不是您的问题。

Rails自版本3.2.3起默认为防止批量分配。 您需要在模型中明确允许它们。这就是为什么来自第三方的旧代码会失败的原因。将模型更改为:

class Event
  ..
  attr_accessible :title, :description, starts_at ...
end

但是不要将user_id之类的内容包含在允许的属性列表中,这样就可以防止只允许更改自己事件的人重新连接它将属于另一个用户的事件。< / p>

另请参阅Rails指南: Security Guide, Mass assignment

答案 1 :(得分:1)

您的具体问题的答案如下,但更好的答案是查看该演示的新版本。从您正在查看的演示开始,我重新演示了演示如何在Rails 3.2中使用fullcalendar JavaScript和css作为资产宝石的演示:

https://github.com/bokmann/fullcalendar_assets


最近某个时候(Rails 3.2?),防止质量分配的默认值发生了变化......你现在需要特别允许你想要允许质量分配的属性。

http://guides.rubyonrails.org/security.html#mass-assignment

在事件模型中,添加如下所示的行:

attr_accessible:title,:description,:starts_at,:ends_at,:all_day

答案 2 :(得分:0)

fullcalendar应用似乎是在config.active_record.whitelist_attributes = true成为铁路默认值之前创建的。

在你的活动模型中,你有一个像这样的行吗? attr_accessible :title, :description等等?