遵循单一责任原则,我想将一些属性和状态放在一个单独的类中,但是,我希望它在同一个表中。
示例:
class Person
attr_accessible :name, :age
end
class Measures
attr_accessible :weight, :height, :other_attrs
end
如何将Measures
合并到Person
,将Measure
数据存储在persons
表中?
答案 0 :(得分:3)
ActiveRecord包含一个特定功能。
class Person
composed_of :measures
end
如果无法从声明中推断出类名,请添加class_name
选项。在您的示例中,这不是必需的。如果数据库列未完全映射到Measures对象的属性,请添加:mapping
选项,例如:
composed_of :measures, mapping: %w[database_column_name, object_attribute_name]
如果要在检索时创建Measures时或在分配新值时执行自定义操作,请分别使用constructor
和converter
选项,并将它们传递给Proc。记录在案here。
注意事项:
答案 1 :(得分:1)
我不确定这是否适用于rails 4,但在rails 3中你可以做类似
的事情class Measures
self.table_name = 'name_of_the_person_table'
attr_accessible :weight, :height, :other_attrs
end
试一试!