我有以下
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
默认情况下,描述属性将在Item和Talk类中可用。有没有办法限制属性,以便只有Talk类可用?
答案 0 :(得分: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
你可以随时做到这一点,但这是一项无用的工作。当您阅读物品的持续时间时,最糟糕的情况是什么?你会收到零,这将导致此后不久崩溃。您不需要如此关注Ruby中的这些类型的问题。
如果需要,您可以创建一个模块并将模块包含在两个类中,用于共享行为,并删除STI。