我使用type = string添加列名称为“type”。 在我为表添加值(列类型=“android”)之后,然后选择表,但它无法运行,它不是打印对象: 设备型号:
class Device < ActiveRecord::Base
belongs_to :user
validates_uniqueness_of :device_token
validates_presence_of :device_token
end
数据库:
这是获取表格的代码:
device = Device.find_or_initialize_by(device_token: device_token)
p device
这是日志:
模板加载(0.5ms)SELECT templates
。id
,templates
。name
FROM templates
WHERE templates
。id
= 1限制1
在148ms内完成200 OK(浏览次数:20.5ms | ActiveRecord:6.2ms)
如果我更新列类型= NULL,它可以正常运行并可以打印对象来查看。但如果列类型=“android”,则无法运行。 我不知道为什么,请帮助我。
答案 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结构的一部分(在此实例中我不建议这样做。)