带有时间戳字段的ActiveResource MassAssignmentSecurity错误

我试图在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 

有更好的解决方案吗?

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

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

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

这将由rails服务器本身更新时间戳文件。

或者你应该看一下RABL和jbuilder,因为两者都是不错的选择。