添加列后无法选择对象

时间:2016-01-08 06:57:40

标签: ruby-on-rails

我使用type = string添加列名称为“type”。 在我为表添加值(列类型=“android”)之后,然后选择表,但它无法运行,它不是打印对象: 设备型号:

 class Device < ActiveRecord::Base
  belongs_to :user
  validates_uniqueness_of :device_token
  validates_presence_of :device_token
end

数据库:

enter image description here

这是获取表格的代码:

 device = Device.find_or_initialize_by(device_token: device_token)
 p device

这是日志:   模板加载(0.5ms)SELECT templatesidtemplatesname FROM templates WHERE templatesid = 1限制1 在148ms内完成200 OK(浏览次数:20.5ms | ActiveRecord:6.2ms)

如果我更新列类型= NULL,它可以正常运行并可以打印对象来查看。但如果列类型=“android”,则无法运行。 我不知道为什么,请帮助我。

2 个答案:

答案 0 :(得分:2)

这可能是因为type是Rails中的保留字。尝试更改此列的名称。

如需更多保留字,请检查Reserved Words in Ruby on Rails

答案 1 :(得分:0)

Walerian所述,问题是type是Rails中的保留字。

在这种情况下,它是为Single Table Inheritance保留的 - 它基本上允许您使用subclass模型:

#app/models/device.rb
class Device < ActiveRecord::Base
   ...
end

#app/models/android.rb
class Android < Device
  ... 
end

通过上述内容,您可以致电:

@android = Android.find x
@android.do_something

...它基本上查询devices表中type Android的所有记录(全部由Rails设置)。< / p>

-

因此,如果您的type模型中有Device列,则无法直接引用它。

您必须重命名该列或将其用作STI结构的一部分(在此实例中我不建议这样做。)