我正在尝试在 Rails 模型上使用 ActiveResource 实现基本的 CRUD 操作。
文档说创建一个 ActiveResource::Base
的子类,然后设置 self.site
。
在我尝试更新已获取的现有记录之前,此方法运行良好。
我看到的错误是“MassAssignmentSecurity::Error
”,当我调用 ActiveResource 对象上的 'save()'
方法时,由于 created_at
和 updated_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/