2011-06-30 58 views
2

我遇到了一個問題,我完全不確定如何處理。Rails:爲單個特定對象創建自定義用戶界面

我有一個共享建築照片的應用程序。用戶have_many照片,並且用戶可以創建收藏夾,也可以創建收藏夾have_many照片。

現在,我有一位客戶是業內的一位大牌,他希望與我一起創建一個完全定製的Collection,它具有與「常規」集合截然不同的外觀和感覺,但下面基本上具有相同的功能。我想滿足這個要求,但我真的不知道該怎麼做。

鑑於我已經有一個功能Collection模型和CollectionsController,加上所有的意見,我想重新使用盡可能多的。因此,例如,自定義集合需要覆蓋面向用戶:show view,但而不是 admin:編輯視圖。

你會如何處理這樣的事情?

我想了解最有效的DRY方法,用於爲數據庫中的單個記錄創建完全自定義的UI。我非常感謝各種建議,包括文章/書籍等的鏈接,因爲我在這方面還沒有找到太多東西。

回答

1

我會允許創建Liquid與用戶和/或集合關聯的視圖模板(如果您希望每個用戶都具有不同的集合變體 - 使用多態關聯),當然可以回到默認狀態對於沒有找到自定義模板的所有情況,也可以使用Liquid來構建一致性和引用。

編輯補充建議的細節:

任何自定義模板應該存儲在數據庫中(我想補充一個測試/預覽功能,所以在進入自定義模板,用戶必須驗證他們的模板中的機會發布前):

# Table name custom_templates 
# id    :integer 
# templatable_type :string 
# templatable_id :integer 
# contents   :text 
class CustomTemplate < ActiveRecord::Base 
    belongs_to :templatable, :polymorphic => true 
end 
class User 
    has_one :custom_template, :as => :templatable  
end 
class Collection 
    has_one :custom_template, :as => :templatable 
end 

在你的控制器動作,尋找一個自定義模板:

custom_template = @collection.custom_template 
custom_template ||= @user.custom_template 
@custom_template = Liquid::Template.parse(custom_template.contents) if custom_template 

在你看來,要麼使自定義模板或默認的模板部分:

<% if @custom_template -%> 
    <%= @custom_template.render(_hash_of_objects_to_pass_to_liquid_template_) %> 
<% else -%> 
    <%= render :partial => 'default' %> 
<% end -%> 
+0

如何使用液態工作,爲最終用戶?我將他們的模板存儲在數據庫中或其他什麼...控制器如何知道使用哪個模板?我從來沒有做過這樣的事情,所以我真的很迷茫。 – Andrew

+0

是的,自定義模板將存儲在數據庫中,而默認視圖仍存儲在文件系統中。 –

+0

我會盡量在第二天提供更多細節 - 我現在走了一段時間。 –