ActiveModel :: MassAssignmentSecurity :: Error(backbone.js + rails + rails-backbone gem)

时间:2013-05-25 15:46:14

标签: ruby-on-rails backbone.js show activemodel mass-assignment

我正试着继续沿着这篇文章引导的路径前进:render show page on submit backbone.js + rails + rails-backbone gem

我仍在试图弄清楚我在该问题的第一段中所描述的内容。我在firebug控制台上搞乱了。当我从根页面单击提交时,一切正常(除了应用程序不导航到新创建的对象显示页面)。 url更改为http://localhost:3000/#/x(其中x是新创建的对象的id)。当我再次单击提交时,我得到“500内部服务器错误22毫秒”。此错误出现在控制台>所有窗口旁边都有一个红色箭头(单击时)会下拉另一个部分 - 单击“HTML”选项卡 - 我收到此错误:

ActiveModel::MassAssignmentSecurity::Error in UsersController#update

Can't mass-assign protected attributes: created_at, id, updated_at

我想我可能已经找到了这个错误的问题 - 我只是不知道该怎么做才能修复它。我的想法是我有两个不同的控制器(一个家庭控制器和一个用户控制器) - 它们的两个索引动作定义相同的东西,这是我的用户控制器索引动作:

class UsersController < ApplicationController
  # GET /users
  # GET /users.json
  def index
    @users = User.all

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @users }
    end
  end
  ...
end

这是我的家庭控制器索引操作:

class HomeController < ApplicationController
  def index
    @users = User.all
  end
end

正如您所看到的,我认为当我第一次点击提交时(从主页)@users设置,并且应用程序被导航到新用户的显示页面(虽然它没有再次 - 将这一切都归结为我的第一个问题 - 网址更改,但页面内容没有,我的第一个问题的链接在上面。)

在网址更改为显示网页网址后(不加载内容),我尝试提交另一个具有唯一输入的用户表单,我得到上面的质量分配错误。这似乎是因为@users已经由家庭控制器设置了...所以当从用户控制器再次调用它时(在第二次提交时)它不能被分配。

我该如何解决这个问题?我需要家庭控制器和用户控制器才能使用@users ......我想。并且,将所有内容都绑定到我的第一个问题:render show page on submit backbone.js + rails + rails-backbone gem

我可以在家庭控制器中做一些事情,将新创建的用户重定向到显示页面(可能在创建,或更新方法或用户控制器/或家庭控制器的索引方法)?这可以解决我从根页面重定向到显示页面的问题吗?所有相关的backbone.js(和我的根index.html.erb文件)代码都发布在我的第一个问题中...请参考它,因为它将填写所有主干细节,以及我真正想要的做。

谢谢!

更新

以下是我的用户控制器中的更新操作(错误应该来自):

def update
  @user = User.find(params[:id])

  respond_to do |format|
    if @user.update_attributes(params[:user])
      format.html { redirect_to @user, notice: 'User was successfully updated.' }
      format.json { head :no_content }
    else
      format.html { render action: "edit" }
      format.json { render json: @user.errors, status: :unprocessable_entity }
    end
  end
end

2 个答案:

答案 0 :(得分:0)

您不应该向服务器发送created_atupdated_at属性。

您应该检查要发送的参数,并确保不发送这些参数。

顺便问一下,我的其他答案对你有帮助吗?

答案 1 :(得分:0)

你不应该插入或添加created_at,id,updated_at这些是自动生成的.......