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