2013-04-22 200 views
0

我正在製作一個包含地址,狀態和zip字段的聯繫人資源的Rails應用程序。也有用戶輸入電話號碼的字段。在另一個我用來獲取靈感的網站上,用戶可以指出手機是手機,家庭還是辦公室,換句話說就是電話號碼類型。我想知道是否可以創建接受關於模型上其他字段的更多信息的字段,或者如果在這種情況下Phone應該是單獨的模型(例如,聯繫has_many:電話),並且電話號碼類型爲Phone模型上的常規字段。Rails模型中屬性的屬性

因爲在我的應用程序用戶HAS_ONE聯繫,我寧願把所有的接觸模型手機的相關信息,而不是讓用戶HAS_ONE聯繫方式和聯繫人的has_many:手機。

回答

1

使用其他模型是實現此目的的一個選項。另一個是創建一個存儲電話號碼的哈希。

class Contact 
    attr_accessible :phones 
    serialize :phones, Hash 
end 

然後,您可以將每部手機存儲在相應的鍵中,例如,

contact = Contact.new 
contact.phones = {home: '1234-1234', work: '1234-5678', mobile: '9876-5432'} 
contact.save! 

而且他們會通過手機哈希表獲得:

contact.phone[:home] # => "1234-1234" 

在模型上提供serialize命令,ActiveRecord其序列,以存儲在數據庫中。

所以它可以讓你數組或哈希存儲到數據庫中,只要你創建的表text場。

遷移將是:

rails g migration add_phones_to_contact phones:text 

欲瞭解更多有關序列:api.rubyonrails.org/classes/ActiveRecord/Base.html