2

私は次のものを持っています

class Item < ActiveRecord::Base
end

class Talk < Item
end

移行に伴い

class CreateItems < ActiveRecord::Migration
  def self.up
    create_table :items do |t|
      t.string :type
      t.string :name
      t.text :description
      t.time :start_time
      t.time :duration
      t.timestamps
    end
  end

  ...
end

デフォルトでは、description プロパティは Item クラスと Talk クラスで使用できます。Talk クラスでのみ使用できるようにプロパティを制限する方法はありますか?

4

1 に答える 1

2
class Item < ActiveRecord::Base
  def duration
    raise NoMethodError
  end

  def duration=(value)
    raise NoMethodError
  end
end

class Talk < Item
  def duration
    read_attribute(:duration)
  end

  def duration=(value)
    write_attribute(:duration, value)
  end
end

あなたはいつでもそれを行うことができますが、それは無駄に大変な作業です. アイテムの期間を読んだときに起こる最悪の事態は何ですか? nil が返され、その後すぐにクラッシュが発生します。Ruby では、この種の問題についてそれほど心配する必要はありません。

必要に応じて、モジュールを作成し、そのモジュールを 2 つのクラスに含めて動作を共有し、STI を削除することができます。

于 2010-01-14T13:49:49.483 に答える