2010-08-12 53 views

回答

0

我想這取決於幾件事情,其中​​包括誰會改變它以及需要多長時間改變一次。如果這僅僅是配置中很少會發生變化,如果有的話 - 那麼我把它放在一個配置文件或初始化某種:

PUBLIC_FIELDS = %w(field_one, field_two, field_three) 
PRIVATE_FIELDS = %w(field_four, field_five, field_six) 

如果這是將是動態的東西,靜態的應用程序與用戶能夠定期修改信息,我會選擇一個單獨的模型,稱爲field_visibility,以下字段field_name,visibility。我將在最初加載字段作爲種子數據,然後給用戶一個UI進行修改。我會給模型兩個有名望的作用域:

named_scope :public_fields, :conditions => {:visiblity => 'public'} 
named_scope :private_fields, :conditions => {:visiblity => 'private'} 

你當然可以使用位字段來代替字符串。如果要擴展到其他模型,還可以向模型添加表名稱。

然後在這個屬於的模型中,你可以做一些事情來回引用。包括命名示波器:

named_scope :public_fields, :select => FieldVisiblity.public_fields 

個別功能,元編程...這也適用於可能的改進。

我希望這有助於!

+0

傑夫,非常感謝你。我將進一步閱讀這篇文章,但是它的內容將是動態的。這意味着用戶將能夠完全控制他們的「隱私」設置。我想我會選擇採用上面解釋的field_visibility路線。 – John 2010-08-12 19:25:51

0

我會更好encapsulate您的類通過使所有變量爲私人並提供每個變量的方法。這也使得稍後添加變量變得更容易。

0

你也可以使用一個flagmap(參見dm-types它是如何工作的)和一個定義flagmap中列位置的類中的數組。然後覆蓋屬性讀取器以返回零,除非@visible設置爲true,如果該字段通過標誌映射標記爲私有。快樂的移位;-)