Rails STI和"type"字符串的设置

The*_*hop 5 inheritance ruby-on-rails sti

我想我需要在Rails中使用STI.

这是我的班级:

class Person < ActiveRecord::Base
end

class Landlord < Person
end
Run Code Online (Sandbox Code Playgroud)

和people表有:type一个字符串列.

所以,我期望在表中看到,作为Person的每一行都将类型设置为"Person",并且每个Landlord都将类型设置为"Landlord".但是,这不是我所看到的.每个房东的类型都设置为"Landlord",但所有Person的类型都设置为nil.这很好可能是rails工作的方式,但我只是在寻找一些确认.

Jef*_*tte 12

事实上,这是STI的工作方式.基类在数据库中的类型为NULL(或者在ruby中为nil).

  • @ioquatix因为正如答案所说,基类类型设置为null.通常,你应该有`class Person`,子类是'Tenant`和`Landlord`.父类应该包含适用于它及其子类的方法/验证.虽然Rails查看子类名称并将其标记为类型. (2认同)

Ari*_*jan 6

如果需要,可以通过添加默认值为的列来解决type问题"Person".