我有一个类别模型
default_scope :order => 'display_order asc'
has_many :resources, :dependent => :destroy
# == Schema Information
#
# Table name: categories
#
# id :integer(4) not null, primary key
# name :string(255)
# description :string(255)
# created_at :datetime not null
# updated_at :datetime not null
#
我有一个资源模型:
belongs_to :category
# belongs_to :submitter, :class_name => 'User', :foreign_key => "submitter_id"
has_and_belongs_to_many :filetypes
has_many :users, :through => :kits
has_many :kits
belongs_to :submitter, class_name: "User"
belongs_to :author
#
# Table name: resources
#
# id :integer not null, primary key
# title :string(255)
# url :string(255)
# description :string(255)
# price :decimal(, )
# created_at :datetime not null
# updated_at :datetime not null
# category_id :integer
# image_file_name :string(255)
# image_content_type :string(255)
# image_file_size :integer
# image_updated_at :datetime
# status :string(255)
# submitter_id :integer
# author_id :integer
#
客户希望能够创建类别,但根据类别为资源分配不同的属性。
实施例: 创建的类别:'图书' 他希望有字段'作者'例如,存储在资源模型中。
创建的类别:'会议' 他希望有领域' location' date'例如,存储在资源模型中。
我如何对其进行建模以使其动态且易于长期维护?
答案 0 :(得分:0)
一个想法是为一个类别的字段设置一个单独的表。例如,您的设置可能如下所示:
category HABTM category_fields
category_field HABTM categories
category_field has_many category_field_values
category_field_value belongs_to category_field
然后,当您的客户创建了一个新类别,即Books
时,他可以在该类别中添加一个名为author
的新category_field。然后,如果他想在图书类别中添加新作者,他会将category_field_value(即JK罗琳)添加到author
category_field
。
因此,
Books category
会有author category_field
,author category_field
会有一个category_field_value
(JK罗琳)。
答案 1 :(得分:0)
你可以看看>> https://github.com/moiristo/dynamic_attributes
或者您考虑使用像MongoDB或redis这样的Schemaless数据库?
您还可以使用hstore,它是postgresql中的键值类型。