我正试着继续沿着这篇文章引导的路径前进: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
答案 0 :(得分:0)
您不应该向服务器发送created_at
和updated_at
属性。
您应该检查要发送的参数,并确保不发送这些参数。
顺便问一下,我的其他答案对你有帮助吗?
答案 1 :(得分:0)
你不应该插入或添加created_at,id,updated_at这些是自动生成的.......