带有时间戳字段的ActiveResource MassAssignmentSecurity错误
我试图在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
有更好的解决方案吗?
假设您要丢弃Timestamp字段并让rails自动创建它们(正常情况下),我会从应用程序内部的新json / xml模板获取数据,该模板不包含Timestamp字段。
另外假设您可以访问提供数据的应用程序,您可以将以下内容添加到您的rails模型中进行测试,它会覆盖(可以称之为“使用”)json模板的as_json方法。
def as_json(options = {}) super(:except => [:created_at, :updated_at]) end
这将由rails服务器本身更新时间戳文件。
或者你应该看一下RABL和jbuilder,因为两者都是不错的选择。