2014-02-12 109 views
1

我正在構建一個旨在最終由非技術人員使用的Rails應用程序。它由一些帶有文本塊的頁面和一個帶有交互式畫布圖紙的特殊頁面組成。存儲可編輯內容的位置?

我想,讓他們可以輕鬆地編輯應用程序中包含的任何一段文字。什麼是最好的方法來實現這一目標?目前,文本是在應用程序的不同視圖中編寫的,如果不通過FTP或類似方式連接並搜索正確的文件,則不允許編輯它。

我想到的三種解決方案:

  1. 存儲所有的文本塊在數據庫中。在每個頁面上,獲取require塊並在渲染前插入它們。使用保存按鈕構建一個頁面,該頁面列出可編輯區域中數據庫中的所有塊。
  2. 將所有文本塊存儲在json文件中。創建一個可以讀取文件並獲取視圖所需塊的模型。建立一個頁面,讓您編輯每個塊並將其保存在文件中。
  3. 創建某種密碼保護的管理界面,其獲取在views目錄下的所有文件,使用正則表達式查找文本塊,並允許用戶編輯每個塊和保存。

從我的角度來看,我所有的三種解決方案看起來很糟糕。對數據庫進行如此多的調用並不感到好嗎?將整個網站文本存儲在一個文件中?用正則表達式解析HTML?

用於解決此問題的常用方法有哪些?

+0

如果要更新文本,則必須將內容放入數據庫或某些其他txt文件中。所以當用戶改變,你必須重寫該文件 –

+0

聽起來像一個正常的CMS。大多數CMS將他們的數據存儲在數據庫中。爲什麼你需要很多數據庫調用?你認爲多少? – Mischa

+1

爲什麼要做這麼多的數據庫調用是不好的?這是一件很常見的事情。我寫的網站上的一些頁面需要做更多的請求來獲取所需的所有數據(產品,圖像,可下載的文檔...)以進行渲染。 –

回答

1

有一個偉大的書在那裏:Crafting Rails 4 Applications。以下是link來源於本書的源代碼。您會在templater文件夾中找到示例。基本上,您將能夠基於請求參數創建自定義模板(就像Rails一樣)。

更新。這裏有幾個鏈接:

  1. Default views in Rails 3.0 with custom resolvers通過JoséValim(書的作者,順便說一下)。
  2. Implementing a Rails 3 View Resolver

而且,這裏的5枚硬幣從我這裏。基本上,它是這樣工作的。您需要定義自己的解析器和它連接到您的ApplicationController(或任何你想要的其他控制器):

class Resolver < ActionView::Resolver 
    # some code here 
end 

class ApplicationController < ActionController::Base 
    append_view_path Resolver.new 
end 

在渲染過程中,Rails會問你的控制器的解析器提供一個模板(它會經過各直到它找到模板或者直到沒有任何解析器離開爲止)。爲了提供模板,您的解析器需要find_templates方法:

def def find_templates(name, prefix, partial, details) 
    # some processing here 
end 

因此,基於該方法的參數,你要提供一些數據庫記錄。但即使您已經有了某種模型,Rails也希望此方法返回ActionView::Template實例。它可以初始化這樣的:

ActionView::Template.new(source, identifier, handler, details) 

所以,這是怎麼你find_templates應該是這樣的:

def find_templates(name, prefix, partial, details) 
    template = DatabaseTemplate.find... # your custom model for DB templates 
    ActionView::Template.new...   # initializing actual template 
end 

兩個模型,並詳細解析書中的源代碼(templater/3_final/app/models/sql_template.rb)介紹。

+0

你有一個代碼示例或免費資源的鏈接?無論如何感謝書鏈接。我試圖看看源代碼,但沒有解釋就沒有多大意義... –

+0

我已經更新了我的答案了一下。看一看。 – marvelousNinja

+0

謝謝!它看起來很有趣,我會研究更多並嘗試。 –

1

我已經做到了與真棒用戶滿意度幾次通過使用這樣的: http://jejacks0n.github.io/mercury/

酒店還設有一個Railscast,讓你一步的指示,一個很好的概述和步驟:

http://railscasts.com/episodes/296-mercury-editor

希望它有幫助。它看起來很不錯,而且很容易用於最終用戶。

+0

從用戶體驗的角度來看,這令人印象深刻!非常感謝你的回答。 –