一個流程有三階段的作業單要填寫(Order , Buildup , Endup ),中間都會經過驗收簽名(Check_order , ect)。
驗收簽名的資料都相似,因此利用Model繼承讓他們住在同一個資料表(Checklist)。利用N:M的多對多接續(參照)。
Rails的多對多是利用欄位名默認對照,但現在子資料表己經變成多型,從上方的表單無法找到指定的驗收資料。一般教學不大常提到這點,昨天花了點時間才試出。
#最上頭的Model Order.rb
#has_one :check_list , :as => :table
#過去一般用到這行,指定checklist便可,但現在要做的是指定checklist下的check_order,直接用下方的指定便可
has_one :check_order , :as => :table , :conditions => ["type = ? " , 'CheckOrder']
#中間層的Checklist.rb
self.inheritance_column = :type #歸類三種子表格的欄位名
belongs_to :check_order
belongs_to :check_buildup
belongs_to :check_endup
belongs_to :table , :polymorphic => true
#最下層的check_order.rb Class名改掉繼承便可
class CheckOrder < CheckList
end
沒有留言:
張貼留言