8

比如说,如果我们生成了一个模型

rails generate model animal name:string birthday:date

现在我们想创建其他模型来继承它(例如Dog和Cat),我们应该rails generate model再次使用还是自己添加文件?如果我们使用,我们如何指定 Dog 应该从 Animal 继承rails generate model

我认为如果我们使用rails generate model而不是自己添加模型文件,也会为我们创建单元测试文件和夹具文件。还添加了一个迁移文件,除非是使用 MongoDB,否则不会有迁移文件。

4

2 回答 2

6

如果您计划的Dog,Cat和其他子类不会偏离Animal模型,您可以在此处使用STI(单表继承)模式。

为此,请StringAnimal. 然后你可以拥有:

class Dog < Animal
end

class Cat < Animal
end

>> scooby = Dog.create(:name => 'Scooby', :date => scoobys_birthdate)
=> #<Dog id: 42, date: "YYYY-MM-DD", type: "Dog">

生成模型Dog

$ script/generate model Dog --skip-migration

然后改变(通常app/models/dog.rb):

class Dog < ActiveRecord::Base

class Dog < Animal
于 2010-09-01T10:29:36.763 回答
3

据我所知,生成模型时不能指定超类。但是,生成器只是创建类的垫脚石。您可以正常生成模型类,只需更改生成的模型文件中的超类。没有其他地方需要为生成的文件指定继承关系(例如,夹具和单元测试不指定超类或子类)。

所以:

script/generate model Dog

然后改变:

class Dog < ActiveRecord::Base

至:

class Dog < Animal

如果你想生成一个使用单表继承从 Animal 继承的模型,那么你可能需要在 script/generate 调用上指定 --skip-migrations (尽管你可能希望迁移以向动物添加例如狗特定的列表,您将需要type在动物表中添加一个字符串类型的列)。

于 2010-08-31T22:15:15.827 回答