【发布时间】:2010-11-08 21:23:34
【问题描述】:
我有以下 Rails 模型:
class CreateFoo < ActiveRecord::Migration
def self.up
create_table :foo do |t|
t.string :a
t.string :b
t.string :c
t.timestamps
end
end
def self.down
drop_table :foo
end
end
如果我尝试使用不存在的附加属性创建新记录,则会产生错误:
Foo.create(a: 'some', b: 'string', c: 'foo', d: 'bar')
ActiveRecord::UnknownAttributeError: unknown attribute: d
有没有办法让 create() 忽略模型中不存在的属性?或者,在创建新记录之前删除不存在的属性的最佳方法是什么?
非常感谢
【问题讨论】:
-
我正在查询第 3 方 Web 服务,该服务返回我正在解析为哈希的 XML。对于服务返回的每个字段,模型中都会有一个字段,但我需要确保如果他们决定返回任何其他字段,这不会阻止创建记录。有 100 多个字段,因此无法单独映射每个字段。
-
那么,您正在从某人那里读取 XML 文件,并且您正试图将其注入模型中?而且您还说您可以有很多选择,对吗?
-
好的,所以提供的答案在技术上很好。但是,从维护 p.o.v.你应该仔细考虑这一点。依赖注入很棘手。 Java中有很多这样的东西,但没有一个真的那么神奇。它增加了复杂性,恕我直言,使您的代码更加脆弱和容易出错。我会考虑添加一个对象或函数来解析/排序所需的字段,然后创建模型。这类似于工厂模式或抽象工厂模式。
标签: ruby-on-rails ruby-on-rails-3