2

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

这很好用,直到我尝试更新已获取的现有记录。我看到的错误是一个' ',当我在我的 ActiveResource 对象上MassAssignmentSecurity::Error调用方法时出现,因为and字段不可访问。'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

有没有更好的解决方案?

4

1 回答 1

1

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

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

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

这将更新 Rails 服务器本身的时间戳文件。

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

于 2013-02-11T13:09:54.967 回答