通過將表格的可能配置作爲序列化哈希存儲在表格中,您可以獲得最大的靈活性。
假設您有一個sections
表,其字段config
的類型爲text
。 Section
模型將聲明serialize :config
並自動將serialize
/deserialize
任何散列分配給section.config
的實例。
這config
散列將具有您的部分佈局所需的屬性,例如,
section.config = {
components: [:paragraph, :image, :image, video],
# ... and any other such config settings you will need in your view to render this section as you want it
}
現在,也許你會實例化一個section
模型,使其在放映視圖,並呈現部分的每個組成部分,你必須一個部分爲每個組件。這樣,您可以遍歷section.config[:components]
並通過該名稱呈現部分內容,例如
section.config[:components].each do |component|
render partial: component, locals: { content: 'some content for the paragraph' }
# the above would render, for example, the 'paragraph' partial
end
有了這種性質的哈希值,可以讓用戶創建自己的部分定製他們想要的,選擇預定義的組件(您擁有的諧音),並在其中它們的任意組合增加的部分。
你甚至可以比上述方法更進一步,並創建一個Component
模型,其中Section
模型將與許多實例相關聯,即Section has_many :components
。與此同時,Section
的Section
的config
字段存儲了一個:components
的數組,它將有許多Component
模型,它們可以遍歷並訪問在渲染整個部分時可以使用的更豐富的一組屬性。這將使您能夠使用由Rails窗體幫助程序提供的嵌套字段,您可以在其中構建一個表單,供用戶用來創建複雜的部分並能夠對其進行重新排序,命名,添加樣式等(假設您添加了字段添加到用於存儲所有此配置數據的組件中)。通過這個最後的方法,您可以使用組件表來存儲節的每個組件的內容數據。
非常感謝! :)我使用後一種方法創建一個組件(在我的情況下命名小部件具有多個字段和與每個字段相關聯的css字段,以及指定小部件的類型的類型字段:段落,圖像,視頻等)動態使用類型I向用戶提供他們可以填寫的表單,其中包含與窗口小部件類型相關的字段,以便僅生成必要的字段。最後,在視圖中,對於每個部分,我遍歷它的小部件並根據類型動態生成div。 –
這真棒@SauravPrakash的方式去! – DiegoSalazar