adding custom fields dynamically to a model

I have a model called List which has many records

class List

has_many :records

end

class Record

end

The table Record has 2 permanent fields: name, email. Besides these 2 fields, for each List a Record can have 'n' custom fields.

for example: for list1 I add address(text), dob(date) as custom fields. then while adding records to list one, each record can have values for address and dob.

Is there any activerecord plugin which provides this type of functionality. Else could you share your thoughts on how to model this.

Thanks in advance, Pankaj

Are you talking about a dynamic view here? I.E the table 'records' has 10 fields, but for this particular list only 3 of them are going to be used?

BTW, if your table is called "records" it will cause problems for ActiveRecords finds. I suggest you rename it to something else.

pankaj wrote:

I have a model called List which has many records

class List

has_many :records

end

class Record

end

The table Record has 2 permanent fields: name, email. Besides these 2 fields, for each List a Record can have 'n' custom fields.

for example: for list1 I add address(text), dob(date) as custom fields. then while adding records to list one, each record can have values for address and dob.

Is there any activerecord plugin which provides this type of functionality. Else could you share your thoughts on how to model this.

If there's really no common schema beyond name and e-mail, then you have several options to play with:

* Use a serialized hash for the "extra" fields. * Put the "extra" fields in some other table and use associations. * Use a schemaless database such as MongoDB.

This is not something that SQL databases do easily.

Thanks in advance, Pankaj

Best,

Marnen Laibow-Koser wrote:

* Put the "extra" fields in some other table and use associations.

You *could* implement a simple "key - key value" model, and tie that back to the record and list since it seems that you'll have different custom fields per list.

Perhaps the "list" model has an associated list of custom field definitions (name, type, size, etc?)

Each "record" for the list finds out what its list's custom fields are, then maintains values for those in its associated table of 'custom field values'

Or something like that...