0

我需要關於如何爲我正在塗鴉的Rails 4應用程序構建模型的意見。架構不應該太難,但我已經圈了幾個小時,所以我會把它扔給社區。針對不同類型的數據構建Rails模型

我有一個叫做「簽入」has_many「字段」的模型。每個字段可以有許多值,可以是幾種數據類型之一,隨着時間的推移可能會增加,但對於初學者來說,只有floatstring。一旦一個字段被添加到簽入中,其數據類型不能改變。

認爲對於減肥,其中有些人會想只weight登錄簽入的。其他人可能想要登錄weight,%bodyfat。其他人可能會想其他指標或你在什麼樣的心情文本字段中的額外領域

所以我有這麼遠是:

class Checkin < ActiveRecord::Base 
    has_many :fields 

class Field < ActiveRecord::Base 
    belongs_to :checkin 

然後,我打算做

class DataFloat < ActiveRecord::Base 
    belongs_to :field 

class DataString < ActiveRecord::Base 
    belongs_to :string 

的模式是現在只是引用簡單。 DataFloat有一個浮子和DataString有一個字符串(如你所期望)

然後,我會使用類似ActiveRecord::Base.descendants一個(按THIS)創建一個選擇框,讓你可以選擇是場什麼時候你將它添加到簽入。

我對所有這些MVC專家的問題了還有這是否是做到這一點的最好辦法。 DataFloat和DataString擴展的中心對象「Data」會更好嗎?有沒有第三種,我沒有想到的更好的方式?

回答

0

任何人...... bueller?

我設法解決它,但它花了很長時間來尋找什麼,我試圖做正確的稱呼。它基本上是相反的多態關聯。

有一個夢幻般的教程通過符文馬德森在這裏: https://gist.github.com/runemadsen/1242485

基本上我做這種方式:

class Field < ActiveRecord::Base 
    has_many :field_datas 
    has_many :data_ints, :through => :field_datas, :source => :data_object, :source_type => 'DataInt' 
    has_many :data_floats, :through => :field_datas, :source => :data_object, :source_type => 'DataFloat' 
    .... etc..... 

然後我做的:

class FieldData < ActiveRecord::Base 
    belongs_to :field 
    belongs_to :data_object, :polymorphic => true 
end 

然後終於在實際數據,這是一個ID和一列的表格:

class DataInt < ActiveRecord::Base 
    has_one :field_data, :as =>:data_object 
    has_one :field, :through => :datas 

然後就會有一個DataType類用於每種數據類型。

我想我可能需要編寫特殊處理,以確保一切都被摧毀,創建正確,但總體來說,我敢滿意。

我很想知道是否有人有這樣做的意見。

相關問題