gpt4 book ai didi

ruby-on-rails - Backbone 想要包含 created_at、updated_at 等,但我不希望它包含

转载 作者:行者123 更新时间:2023-12-04 05:24:33 24 4
gpt4 key购买 nike

我正在使用带有 Rails 的 Backbone。我有一个模型,我可以很好地创建和销毁它。但是,当我编辑时,出现此错误:

Can't mass-assign protected attributes: created_at, id, updated_at

这是有道理的。这些属性受到保护,应该受到保护。 Backbone 不应该尝试更新这些属性,但 Backbone 并不知道更好。

当然,一种选择是删除 params[:created_at]等在我的 Rails Controller 中,但我可以想象得到真正不干燥的速度非常快,而且不得不这样做似乎是错误的。

有没有办法告诉 Backbone 不要在其表单中包含这些属性?

最佳答案

要么不要将它们发送给客户端,以便您的 Backbone 模型永远不会知道它们,要么覆盖 toJSON 在您的模型中排除它们。

默认toJSON实现非常简单:

toJSON: function() {
return _.clone(this.attributes);
}

所以你可以用这个替换它:
toJSON: function() {
var attrs = _(this.attributes).clone();
delete attrs.created_at;
delete attrs.updated_at;
return attrs;
}

您甚至可以将其直接修补到 Backbone.Model.prototype如果这对你有意义。

改变的缺点 toJSONtoJSON倾向于在 Backbone 中执行双重任务:
  • toJSON用于序列化服务器的模型和集合。
  • toJSON用于序列化 View 的模型和集合。

  • 如果您还想使用 updated_atcreated_at在 View 中,我建议添加另一种方法,比如 serialize_for_view ,这符合标准 toJSON做:
    serialize_for_view: function() {
    return _(this.attributes).clone();
    }

    然后使用诸如 var html = this.template({m: this.model.serialize_for_view()}) 之类的东西构建 View 的 HTML。你也可以猴子补丁 serialize_for_view进入 Backbone.Model.prototype如果你想在任何地方使用它。

    关于ruby-on-rails - Backbone 想要包含 created_at、updated_at 等,但我不希望它包含,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13352201/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com