单表/型号与二级型号?

时间:2016-06-22 17:35:03

标签: ruby-on-rails ruby-on-rails-4

如果我有一个名为Keyboard的模型。有没有办法创建两个名为MechanicalKeyboardChicletKeyboard的子模型?

子模型的控制器和视图逻辑略有不同,所以我想将它们从主模型中分离出来 - 但仍然只有一个表/主模型。

子模型将使用相同的属性。我尝试使用enum,但单独的控制器和视图更有意义。

在Rails中可以吗?

1 个答案:

答案 0 :(得分:1)

是的,这是可能的。它被称为Single Table Inheritance。您只需要在名为Keyboard的{​​{1}}模型中添加新属性:

type

然后,您定义从主模型继承它们的表:

class AddTypeToKeyboards < ActiveRecord::Migration
  def change
    add_column :keyboards, :type, :string
  end
end

他们将使用完全相同的表# app/models/mechanical_keyboard.rb class MechanicalKeyboard < Keyboard # Custom validations and methods go here. end # app/models/chiclet_keyboard.rb class ChicletKeyboard < Keyboard # Custom validations and methods go here. end ,并共享相同的属性(列)。要创建,更新,查询或管理键盘,您可以使用您想要的任何类。 Rails将自动处理keyboards值。例如,要检索所有机械键盘,您可以使用type,相当于MechanicalKeyboard.all