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

时间:2015-12-30 12:40:14

标签: ruby-on-rails ruby ruby-on-rails-3.2

我有一个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。我怀疑这与[]我使用而不是。对于左值。

任何人都可以看到我做错了吗?

感谢您的帮助, 凯文

1 个答案:

答案 0 :(得分:1)

不可否认,弃用措辞略有混淆,但您会看到此警告,因为model[attribute_name] = ...样式仅支持模型上的ActiveRecord属性,而不支持{{1}添加的非持久属性}。

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

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

send