如果我有一个名为Keyboard
的模型。有没有办法创建两个名为MechanicalKeyboard
和ChicletKeyboard
的子模型?
子模型的控制器和视图逻辑略有不同,所以我想将它们从主模型中分离出来 - 但仍然只有一个表/主模型。
子模型将使用相同的属性。我尝试使用enum
,但单独的控制器和视图更有意义。
在Rails中可以吗?
答案 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
。