路由到/ public中的静态.md页面(ruby on rails 2.3.5)

时间:2013-05-03 09:42:50

标签: ruby routing ruby-on-rails-2

这个问题被问到before,但答案是ruby on rails 3.0 +

基本上我想将我的wiki页面(即.md页面)放在我的2.3.5 ruby​​ on rails项目的公共文件夹中。我希望用户在键入mysite.com/wiki时访问维基页面的主页(即这将映射到/public/wiki/home.md)..

我如何在ruby on rails 2.3.5上执行此操作? (路由文档online的信息量不大)

另外一般情况下,如果出于某种原因我仍然坚持使用RoR 2.3.5项目..我在哪里可以获取文档?官方文档似乎只适用于最新的RoR版本(即3 +)

1 个答案:

答案 0 :(得分: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渲染,但您可以切换任何您喜欢的渲染器。