0

これを実装するレールの方法を理解しようとしています。車両の種類のテーブルがあります

create_table :vehicles do |t|
    t.string make
    t.integer model_year
    t.string type #truck, motorcycle, sedan, etc
end

実際に存在するその車のインスタンス

create_table :vehicle_instances do |t|
    t.integer vehicle #links to above table
    t.integer owner
    t.integer bought_date
    t.integer mileage
    t.string type #truck, motorcycle, sedan, etc, but with different methods than above
end
  1. vehicle テーブルの :type を vehicle_instances テーブルに移動したい。どうすればこれを行うことができますか?
  2. vehicle_instances テーブルでタイプがより具体的な場合があります (つまり、車両では type:'motorcyle'、インスタンスでは type:'dirt_motorcycle' または type:'road_motorcycle')。Vehicle をインスタンス化するときに Motorcycle クラスの下にあるものと、VehicleInstance をインスタンス化するときにより具体的なクラスの下にあるものの両方をキャッチする方法はありますか?

ありがとう!

4

1 に答える 1

0
  1. 親の属性として残しておきますが、必要な場合は... vehicleInstance で次のようにします。

    before_save :pull_type

    def pull_type self.type = self.vechile.type end

また、 vehicle 列を vehicle_id に変更します。これは予想される構文であり、関係の競合を停止します。

  1. 個人的には、「サブタイプ」のインスタンスに列を追加します: [dirt, race, nil] サブタイプのオプションは、親のタイプに基づきます。
于 2012-06-24T21:54:55.720 に答える