ruby on rails - Database design for optional fields -
i've got 3 tables:
- orders
 - line_items
 - products
 
they're setup as:
order has many products through line_items
this allows me store in line_items such things product_id, quantity, price @ time of purchase, discount, etc...
all point.
what i'm looking achieve:
i need have some products have user changeable status. meaning @ point in future after order has been processed, purchased product status can changed 1 status another.
the product table has statusable boolean field tracks whether said product supports status.
the question:
would add status field in line_items? small amount of products require status feels waste i'm not sure how else approach hurdle. main concern being i'll end massive table application grows , specific products require optional fields.
there 2 options this:
- create column in join model
 - create separate "statuses" table, can use create specific status updates
 
--
attribute
i create column in join model support status. yes, require have column every line_item, make process simpler, , give extensibility without massive issues
you'll best using 1 of state machine gems (state_machine, aasm_state) provide:
#app/models/line_item.rb class lineitem < activerecord::base   include aasm    aasm     state :active, :initial => true     state :inactive      event :activate       transitions :from => :inactive, :to => :active     end      event :deactivate       transitions :from => :active, :to => :inactive     end   end end   this give ability directly affect status of line_item model
--
associated model
alternatively, may want create different table / model:
#app/models/line_item_status.rb class status < activerecord::base    #field id | line_item_id | status | created_at | updated_at    belongs_to :line_item end  #app/models/line_item.rb class lineitem < activerecord::base    has_one :status    delegate :status, to: :status #-> allows call @line_item.status end   this give ability set status each product, making data tables more efficient including single status each line_item
Comments
Post a Comment