2013-05-03 45 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