0

皆さん、こんばんは

私は3つの足場を持っています: rails generate scaffold person alter:integer, name:string

rails generate scaffold トレーナー

レールは足場を生成します

 class Person < ActiveRecord::Base
   attr_accessible :alter, :name
 end

 class Sportler < Person
    belongs_to :trainer
 end

 class Trainer < Person
   has_many :sportler
 end

このコードをスポーツラーとトレーナーのビューに追加しました/_form.html.erb

 <div class="field">
     <%= f.label :name %><br />
     <%= f.text_field :name %>
   </div>
  <div class="field">
     <%= f.label :alter %><br />
     <%= f.number_field :alter %>
   </div>

次に、トレーナーとスポーツマンを追加しました。その後、データベースを調べます。人、トレーナー、スポーツ選手用のテーブルが 1 つあります。 しかし、すべてのエントリは peple_table にあります。何がうまくいかないのですか?

people テーブルには name と alter が列として含まれています。トレーナーとスポーツ選手には、これらのコラムはありません。

4

2 に答える 2

1

の足場を作成したときTrainerSportlerそれらは別個のモデルとして扱われたため、データベース内に独自のテーブルがありました。また、列を指定しなかったため、何も取得されませんでした。

次に、サブクラス化PersonするTrainerと、Sportlerレールは単一テーブル継承を使用していると想定するため、すべてpeopleテーブルに格納されます。この動作が必要な場合は、I thinkにtype列を追加する必要があります。people

モデルにテーブル名を明示的に設定できるかどうかはわかりません (次のようにする必要があります): set_table_name "sportlers"そして、set_table_name "trainers"それらを独自のテーブルに入れるには。

于 2013-02-09T23:57:52.927 に答える
0

Rails で STI を使用するには、親モデルに type:string フィールドを追加する必要があります。

rails generate scaffold person alter:integer, name:string, type:string

その後、サブクラスを足場にする必要はありません。新しいモデル ファイルを作成し、Person から継承するだけです。

Rails は、追加された type フィールドを使用してサブクラスを永続化できるほどスマートです。サブクラスは、ActiveRecord モデルとまったく同じように機能します。サブクラスで次のコードを実行すると:

Trainer.create(name: 'John')

タイプ フィールドの値が Trainer の新しいデータベース エントリを受け取ります。

于 2015-05-28T14:12:05.303 に答える