其實一個幫手,那就是如果我不得不處理8到10個屬性,我會做什麼。但是,如果模型類的屬性太多,並且在用戶的組,公共,共享等基礎上顯示這些屬性的複雜邏輯,那麼我建議您將其移至單獨的模型類,我們假設:「ProfileConfiguration
或ProfileSetting
」,它將在行級別維護每個屬性,或者您可以將這些設置移動到Redis,其結構如下所示:user_id: {attribute_name: true, type: 'type_name'}
但有一個缺點是您將依賴Redis服務器的可用性。現在
,你的情況:
serialize :profile_preferences, Hash
,然後你維護它(正如你所說,只是在爲他們的任務相反的方式):
{email: false, address: false, age: true }
但是,你可以去然後創建一些方便的方法,您可以調用您的配置文件對象:
after_initialize :load_profile_preferences
private
def load_profile_preferences
profile_preferences.each do |attr, value|
self.class.send(:define_method, "show_#{attr.to_s}?") { value }
end
end
現在,您將得到方便的m方法如:show_email?
,show_address?
和show_age?
上Profile
類的對象,你可以delegate到User
類的實例。因此,您現在可以在您的視圖中執行類似操作,例如:
<%= "Email: {user.email}" if user.show_email? %>
<%= "Address: {user.address}" if user.show_address? %>
<%= "Age: {user.age}" if user.show_age? %>
謝謝我以後也想到了這個方法。 – 2014-10-13 04:15:58
結合Presenter模式(在視圖上實例化類,具有如何顯示屬性的方法等),這將是 - 在我看來 - 最好的方法。 +1 – MrYoshiji 2014-10-15 14:58:34
@MrYoshiji然後請加你回答。 – 2014-10-16 04:04:01