【问题标题】:ActiveModel::MassAssignmentSecurity::Error (backbone.js + rails + rails-backbone gem)ActiveModel::MassAssignmentSecurity::Error (backbone.js + rails + rails-backbone gem)
【发布时间】:2013-05-25 15:46:13
【问题描述】:

我正在努力沿着我在这篇文章中被引导的道路继续前进:render show page on submit backbone.js + rails + rails-backbone gem

我仍在试图弄清楚我在该问题的第一段中描述的内容。我在萤火虫控制台里乱七八糟。当我从根页面单击提交时,一切正常(除了应用程序没有导航到新创建的对象显示页面)。 url 更改为http://localhost:3000/#/x(其中 x 是新创建对象的 id)。当我再次单击提交时,我得到“500 Internal Server Error 22ms”。此错误出现在控制台>所有窗口中,旁边有一个红色小箭头(单击时)会下拉另一个部分-单击“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 被设置,应用程序被导航到新用户的显示页面(尽管它没有't which again - 这一切都与我的第一个问题联系在一起 - 网址发生了变化,但页面的内容没有,我的第一个问题的链接在上面)。

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

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

我可以在家庭控制器中做一些事情,将新创建的用户重定向到显示页面(可能在家庭控制器的创建、更新方法或用户控制器/或索引方法中)?这可以解决我从根页面重定向到显示页面的问题吗?所有相关的主干.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

【问题讨论】:

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


    【解决方案1】:

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

    您应该检查您发送的参数并确保您没有发送这些参数。

    对了,我的其他回答对你有帮助吗?

    【讨论】:

    • 嘿胡安...感谢您的回答!您在最后一个问题上给出的答案帮助我更好地理解了我正在做的事情......但是当我在根页面上单击提交时,它并没有解决我没有去显示页面的问题......有什么想法吗?
    • 我将在哪里发送 created_at 和 updated_at 参数?它们在我的用户模型中不可访问属性...
    • 我要将我的用户控制器更新操作添加到我的帖子中......错误应该来自那里。
    • 在哪里?我将在哪个文件中传递参数?我在整个项目中搜索“created_at”……它只出现在我的 schema.rb 中
    • 这是导致问题的行吗? if @user.update_attributes(params[:user])
    【解决方案2】:

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

    【讨论】:

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