2013-05-03 46 views
0

這個問題被問before,但得到的答覆是的Ruby on 3.0+路由到/公共靜態.MD頁(Ruby on Rails的2.3.5)

基本上,我希望把我的wiki頁面軌(即.md頁)在我的2.3.5 ruby​​ on rails項目中的公共文件夾中。我想要用戶訪問維基頁面的主頁時,他們鍵入mysite.com/wiki(即這將映射到/public/wiki/home.md)..

我該如何做到這一點在軌道上的紅寶石2.3.5? (路由文檔online是不是很豐富)

也一般如果由於某種原因我堅持與RoR 2.3.5項目..我去哪裏文檔?看起來官方文檔只適用於最新的RoR版本(即3+)

+1

rails 2.3.x的指南在這裏:http://guides.rubyonrails.org/v2.3.11/如果你使用的是2.3.5,你肯定需要升級,版本中有一些很大的安全問題少於2.3.11。 – theTRON 2013-05-03 09:58:24

+0

@theTRON uha ..告訴那個[fedena](http://www.projectfedena.org/)夥計 – abbood 2013-05-03 10:40:14

回答

2

我認爲你想讓Markdown被渲染。如果你只是從你的public目錄中提供它,那麼Rails將不會渲染它。

你可以做的是一個新的控制器,如WikiController,它可以呈現降價文件,你可以存儲在lib/wiki之類的地方。我還沒有直接測試過這些,所以你應該只將它作爲指導,但它應該工作正常。

控制器可能看起來是這樣的:

# app/controllers/wiki_controller.rb 
class WikiController < ApplicationController 
    def show 
    page = File.open(File.join(Rails.root, 'lib', 'wiki', "#{params[:page_id]}.md"), 'r') { |f| f.read } 
    markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, :autolink => true) 
    render :html => markdown.render(File.join(Rails.root, 'lib', 'wiki', "#{params[:page_id]}.md")) 
    end 
end 

而且你可以添加這樣的路線:

# config/routes.rb 
map.connect 'wiki', :controller => 'wiki', :action => 'show', :page_id => 'home' 
map.connect 'wiki/*page_id', :controller => 'wiki', :action => 'show', :as => :wiki 

第一條路線處理您的特殊情況(home.md),第二個會允許你構建你喜歡的wiki(包括將文件放置在子目錄中等)。鏈接到/wiki/help/getting_started將嘗試呈現文件lib/wiki/help/getting_started.md

您還有一個鏈接幫助程序方法,因此如果您需要從您的應用程序鏈接到wiki頁面,則可以撥打wiki_path(:page_id => 'help/getting_started')

此解決方案假定您使用RedCarpet進行Markdown渲染,但是您可以切換您喜歡的任何渲染器。

+0

很酷!我會試試看,並讓你知道它是怎麼回事 – abbood 2013-05-03 10:55:36

+0

我更新了我的答案,以反映我的方法得到的一些問題 – abbood 2013-05-03 12:15:21