在标准的Rails控制器中,我会像这样创建一条记录:
@user = User.new(params[:user])这假设传入的表单参数是嵌套的。
我一直在使用Backbone.js,我注意到在默认情况下,Backbone不会像普通的Rails表单那样嵌套参数,这实际上是我所期望的。所以我想知道我该怎么做...
我有吗?
在服务器端,通过查看accepts头等来判断它是否是来自Backbone的请求,并自己操作参数,这样我就可以保持我的控制器代码很小:
do_some_params_manipulation_with(params)
@user = User.new(params[:user])
respond_to do |format|
if @user.save
format.html {redirect_to users_url}
format.json {render :json => @user.to_json }
end
end或者,我是否实例化每个分支中的对象,这些分支最终会有重复的代码,但从长远来看可能更易于维护……
respond_to do |format|
format.html do
@user = User.new(params[:user])
if @user.save
redirect_to users_url
end
end
format.json do
@user = User.new(params) # and rely on mass-assignment protection
if @user.save
render :json => @user.to_json
end
end
end或者,我是否可以通过重写.toJSON方法来修改我的Backbone.js模型(我不完全确定该怎么做,因为我还不太了解Backbone.js ),这样它就可以嵌套参数了?
在这种情况下,我可以访问应用程序的两端,但我对其他人正在做的事情感兴趣。
发布于 2011-06-08 06:30:01
当您可以让常规Rails表单和主干表单与根节点相匹配时,这是很好的。这就是为什么在我的上一个应用程序中,我选择覆盖骨干模型的toJSON方法。
您可以覆盖全局toJSON方法as Raimonds Simanovskis suggested。但即使是非干式方法也不是那么糟糕。每个模型定义只有一行样板:
// Depends on Underscore.js
User = Backbone.Model.extend({
toJSON: function() {
return { user: _.clone( this.attributes ) }
},
// Your other methods here
});编辑:更正后的代码示例。很抱歉出现这些错误,我正在从CoffeeScript翻译到JavaScript。
发布于 2012-07-02 19:52:54
发布于 2011-08-06 01:22:30
我对model.name属性下的名称空间保存请求做了一些修改。It猴子仅在sync()调用期间修补toJSON(),并恢复原始方法,以便您可以照常使用它。
我已经在CoffeeScript中实现了它。
https://stackoverflow.com/questions/6272070
复制相似问题