0

我正在尝试沿着我在这篇文章中被引导的路径继续前进:在提交主干.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 被设置,并且应用程序被导航到新用户的显示页面(尽管它不是再次 - 将这一切与我的第一个问题联系起来 - 网址发生了变化,但页面的内容没有,我的第一个问题的链接在上面)。

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

我将如何解决这个问题?我需要家庭控制器和用户控制器才能使用@users ...我想。并且,将所有内容都与我在这里的第一个问题联系起来: render show page on submitbone.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
4

2 回答 2

0

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

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

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

于 2013-05-25T15:58:06.187 回答
0

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

于 2013-07-19T13:06:56.340 回答