【问题标题】:Rails 3.2 POST with AJAX creating MassAssignmentSecurity::ErrorRails 3.2 POST 与 AJAX 创建 MassAssignmentSecurity::Error
【发布时间】:2012-06-21 16:47:55
【问题描述】:

我有点像个小鬼,我正在尝试利用 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,但通过 AJAX POST(它正在发送)传递 AUTH_TOKEN,但它仍然无法正常工作。

有什么想法吗?

【问题讨论】:

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


    【解决方案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

    【讨论】:

    • 成功了!现在由于某种原因,它生成了一个全新的日历来放置活动!我将使用您的新演示应用程序修改我所拥有的东西。谢谢!
    【解决方案2】:

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

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

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-16
        • 2013-11-27
        • 1970-01-01
        • 2013-02-06
        相关资源
        最近更新 更多