ruby-on-rails - 时间戳字段的 ActiveResource MassAssignmentSecurity 错误

标签 ruby-on-rails ruby oop

我正在尝试在 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

有更好的解决方案吗?

最佳答案

假设您想要丢弃时间戳字段并让 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/

相关文章:

c++ - 如何将 "warning message"添加到我的程序中?

python - 如何扩展 Django "login"表单?

ruby-on-rails - Rails 呈现 INNER JOIN 的 XML

c++ - 需要帮助理解构造函数参数和静态变量

ruby-on-rails - rake 数据库 :create throws "database does not exist" error with postgresql

ruby-on-rails - 找不到 capybara 的选择框

ruby-on-rails - 什么是可以轻松集成到现有应用程序的优秀 Ruby on Rails 论坛?

ruby - 如何在 ruby​​ 中简化太多的 AND/OR

ruby-on-rails - Ruby on Rails 4 身份验证,设计与 bcrypt

ruby-on-rails - 升级 Mountain Lion 后 Rails Server 无法运行