ruby-on-rails - Backbone.js 和 Rails - 如何处理来自 Backbone 模型的参数?

标签 ruby-on-rails backbone.js

在标准的 Rails Controller 中,我会创建一个这样的记录:

@user = User.new(params[:user])

这假设传入的表单参数是嵌套的。

我一直在玩 Backbone.js,我注意到默认情况下,Backbone 不会像普通 Rails 表单那样嵌套参数,这实际上是我所期望的。所以我在想我该怎么办...

我是吗

在服务器端通过查看接受 header 等来确定它是否是来自 Backbone 的请求并自己操作参数,以便我可以保持我的 Controller 代码很小:
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 模型,以便它嵌套参数?

在这种情况下,我可以访问应用程序的两端,但我对其他人在做什么感兴趣。

最佳答案

当您可以将一般 Rails 表单和 Backbone 表单与根节点匹配时,这很好。这就是为什么在我的上一个应用程序中我选择覆盖 Backbone 模型的 toJSON 方法的原因。

您可以覆盖全局 toJSON 方法 as Raimonds Simanovskis suggested .但即使是非 DRY 方式方法也不错。每个模型定义只有一行样板:

// Depends on Underscore.js
User = Backbone.Model.extend({
  toJSON: function() {
    return { user: _.clone( this.attributes ) }
  },
  // Your other methods here
});

编辑:更正的代码示例。抱歉出现错误,我正在从 CoffeeScript 翻译成 JavaScript。

关于ruby-on-rails - Backbone.js 和 Rails - 如何处理来自 Backbone 模型的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6272070/

相关文章:

ruby-on-rails - 如何在 Rails3 应用程序中的所有其他 Controller before_filters 之后在 gem 中附加 before_filter?

mysql - 相关元素的 ActiveRecord 查询

javascript - 使用带有静态 JSON 的 Backbone.js 模型/集合

Backbone.js - 获取数据并显示

backbone.js - 使用 Require.js 的 Backbone Marionette、Regions 以及如何设置

ruby-on-rails - 模型- View - Controller 是否与人工智能和行为树很好地配合?

ruby-on-rails - 多对多通过 Rails 应用程序中的关联构建/创建属性

ruby-on-rails - 执行超过 60 秒时如何引发异常?

javascript - 从主干 View 访问 Rails session 变量

javascript - 监听主干模型中对象的更改事件