您正在尝试在 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])
我有一个 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])