【问题标题】:ActiveResource MassAssignmentSecurity error with Timestamp fields带有时间戳字段的 ActiveResource MassAssignmentSecurity 错误
【发布时间】:2013-02-11 13:06:48
【问题描述】:

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

有没有更好的解决方案?

【问题讨论】:

    标签: ruby-on-rails ruby oop


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2019-03-15
      • 1970-01-01
      • 2019-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多