1

我有点笨,我试图搭载 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"}

解决方案看起来应该是这样,但是将 AUTH_TOKEN 与 AJAX POST(它正在发送)一起传递,但它仍然无法正常工作。

有任何想法吗?

4

3 回答 3

1

如果你得到这个异常,你应该已经通过了身份验证,所以 Auth_token 不是你的问题。

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

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

但是不要将诸如此类的内容包含user_id在允许的属性列表中,这样可以防止仅允许更改自己的事件的人重新连接该事件,然后该事件将属于另一个用户。

另请参阅 Rails 指南: 安全指南,质量分配

于 2012-06-21T17:10:13.747 回答
1

您的具体问题的答案如下,但更好的答案是查看该演示的新版本。由于您正在查看演示,我重新创建了演示,展示了如何在 Rails 3.2 中使用全日历 JavaScript 和 css 作为资产 gem:

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

于 2012-06-21T17:14:56.530 回答
0

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

在您的事件模型中,您是否有类似 attr_accessible :title, :description等的线?

于 2012-06-21T16:55:00.033 回答