您正在尝试在 Rails 3.2.5 中创建属性

You're trying to create an attribute in Rails 3.2.5

我有一个 DI 例程,其中有一个大的 csv,我正在导入已知的列格式。我先设置一个柱状图:

col_map =
    {
      4 => :name,
      6 => :description,
      21 => :in_stock,
      ...

然后我读入每一行,然后使用列映射,尝试设置属性:

i = Item.new
col_map.each do |k,v|
    i[v] = chunks[k] #chunks is the line read in split by the delimiter

在我的项目声明中,我声明了两个属性,b/c它们不存储在数据库中,它们用于其他逻辑:

attr_writer :in_stock
attr_writer :end_date

当代码到达这一行时:

i[v] = chunks[k]

我收到这条消息:

X.DEPRECATION WARNING: You're trying to create an attribute `in_stock'. Writing arbitrary attributes on a model is deprecated. Please just use `attr_writer`

但我并没有尝试创建属性,我正在使用 attr_writer。我怀疑这与我使用的 [] 而不是 .对于左值。

谁能看出我做错了什么?

感谢您的帮助, 凯文

不可否认,弃用措辞有点令人困惑,但您看到此警告是因为 model[attribute_name] = ... 样式仅支持模型上的 ActiveRecord 属性,而不支持添加了 [= 的 non-persisted 属性12=].

您可以看到产生警告的代码 over here

为了解决这个问题,我会使用 send,它适用于所有属性,例如

i.send("#{v}=", chunks[k])