gpt4 book ai didi

ruby-on-rails - 时间戳字段的 ActiveResource MassAssignmentSecurity 错误

转载 作者:太空宇宙 更新时间:2023-11-03 16:31:41 25 4
gpt4 key购买 nike

我正在尝试在 Rails 模型上使用 ActiveResource 实现基本的 CRUD 操作。文档说创建一个 ActiveResource::Base 的子类,然后设置 self.site

在我尝试更新已获取的现有记录之前,此方法运行良好。我看到的错误是“MassAssignmentSecurity::Error”,当我调用 ActiveResource 对象上的 'save()' 方法时,由于 created_atupdated_at 字段不可访问。

我发现如果在我的模型类上用 attr_accessible 标记这些字段它工作正常,但这似乎是一个非常不安全且非常糟糕的解决方案。
下面显示了问题的示例:

rails new TestApp
cd TestApp
rails generate scaffold User first:string last:string
rake db:create
rake db:migrate
rails server

在我使用的不同终端选项卡上:

irb
require 'active_resource'
class User < ActiveResource::Base
self.site = 'http://localhost:3000'
end
u = User.new()
u.first = 'John'
u.last = 'Shine'
u.save()
#This saves ok
nu = User.find(1)
nu.first = 'Geoff'
nu.save()
#This never works

有更好的解决方案吗?

最佳答案

假设您想要丢弃时间戳字段并让 Rails 自动创建它们(正常情况下),我将从应用程序内的新 json/xml 模板获取数据,该模板不包含时间戳字段。

同时假设您可以访问提供数据的应用程序,您可以将类似下面的内容添加到您的 Rails 模型中进行测试,它会覆盖(可以称之为“使用”)json 模板的 as_json 方法。

def as_json(options = {})
super(:except => [:created_at, :updated_at])
end

这将更新 Rails 服务器本身提交的时间戳。

或者,您应该看看 RABL 和 jbuilder,因为它们都是不错的选择。

关于ruby-on-rails - 时间戳字段的 ActiveResource MassAssignmentSecurity 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14812598/

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