gpt4 book ai didi

ruby-on-rails - Rails 无法为 id、created_at 批量分配 protected 属性

转载 作者:行者123 更新时间:2023-12-01 08:05:55 25 4
gpt4 key购买 nike

我将 rails 用作 backbone.js 站点的服务器端,因此我不断地来回传递 rails 对象。

我注意到 Rails 返回的错误警告:无法批量分配 protected 属性:id、created_at、updated_at

当然,我觉得这很奇怪,因为我从来不需要包含这些字段据我所知,我的 json 看起来很正常

 Parameters: {"id"=>1, "updated_at"=>"2011-04-21T16:41:02Z"},  "created_at"=>"2012-02-23T21:01:02Z", "action"=>"test update"}

最佳答案

您的 JSON 没有问题。问题之一是安全性。默认情况下,Rails 会保护某些属性不被创建或从巨大的散列中更新。这就是错误在使用术语“批量分配”时所指的内容。

您发布的 JSON:

Parameters: {"id"=>1, "updated_at"=>"2011-04-21T16:41:02Z"}, "created_at"=>"2012-02-23T21:01:02Z", "action"=>"test update"}

包含 idcreated_atupdated_at 字段。当此 JSON 传递到操作中并且在 model_object.update_attributes(hash_fields) 中使用哈希时,您将收到此错误。为避免此错误,您可以从散列中删除字段并稍后分配它们,或者理想情况下,让 ActiveRecord 为您工作,这对您来说很神奇,而忽略它们。

如果您确实需要分配它们,您可以这样做:

 model_object.id = id_variable
model_object.created_at = created_at_variable
model_object.updated_at = updated_at_variable
model_object.save

EDIT1(解决关于传回 id 的评论):

如果您使用 Rails REST 模型并调用 controller/:id/action url,则不需要传回 ID,因为该信息已经嵌入到 URL 中。它可以通过 params[:id] 访问,通过 params[:model_name] 访问哈希(遵循 Rails 模型)。

如果您正在做一些不同的事情并且 ID 必须在传回的 JSON 中,那么您可以简单地执行 id = params[:model_name][:id].delete ,这将从哈希中删除 id 并在一次调用中返回值。这并不理想,但可以在紧要关头完成工作。

关于ruby-on-rails - Rails 无法为 id、created_at 批量分配 protected 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9432203/

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