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から逸脱しない場合は、ここでSTI(単一テーブル継承)パターンを実行できます。Animal

Stringこれを行うには、に列を追加しますAnimal。そして、あなたは持つことができます:

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 に答える