2012-07-20 66 views
0

我有一個分類模型我怎樣才能創建具有取決於類型

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 
# 

客戶希望能夠創建類別,但根據類別爲資源分配不同的屬性。

例如: 創建類別:'Books' 他希望將字段「作者」存儲在資源模型中。

創建的類別:'Conference' 他希望將字段'location','date'存儲在資源模型中。

我該如何對其進行建模,使其動態且易於長期維護?

回答

0

一個想法是爲一個類別的字段設置一個單獨的表。例如,你可以設置這個樣子:

category HABTM category_fields 
category_field HABTM categories 
category_field has_many category_field_values 
category_field_value belongs_to category_field 

然後,當你的客戶創造了一個新的類別,即Books,他可以一個新category_field添加到類別稱爲author。然後,如果他想向Books類別添加新作者,他會將一個category_field_value(即JK Rowling)添加到authorcategory_field

因此, 的Books category將具有author category_field,並且author category_field將有一個category_field_value(羅琳)。

+0

謝謝邁克爾我會看看。我很欣賞你的想法。 – chell 2012-07-24 00:13:33