我正在尝试沿着我在这篇文章中被引导的路径继续前进:在提交主干.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