1

使用一些代码来读取 .md 文件的内容,当前代码有两个问题:

1) 没有缓存 2) 如果没有文件,则没有内容(而不是使用 :en 语言)

def show
    unless ['terms', 'privacy','press','cookies', 'help'].include?(params[:page])
      redirect_to root_path
    else
      begin
        # todo : add caching to this?
        @page   = File.read("#{Rails.root}/app/views/static/#{ params[:page] }.#{ locale }.md")
        @title  = File.open("#{Rails.root}/app/views/static/#{ params[:page] }.#{ locale }.md", &:readline)

        unless @page
          @page = "empty"
        end
        render :show
      rescue
        #redirect_to root_path
      end
    end
  end

我用它来显示一些静态内容并能够使用 .md 文件,关于如何改进它的任何建议?我不喜欢的是我需要单独加载标题才能在标题和内容之间添加一些 html/样式。

4

2 回答 2

1

为什么不将它保存到数据库中?

它也不是很安全,有人可能会在您的参数中注入虚假路径:

# imagine what happens if 
# params[:page] = "../../../../../etc/passwords" and locale is ""
@page   = File.read("#{Rails.root}/app/views/static/#{ params[:page] }.#{ locale }.md")

您可以将内容保存在数据库中并通过普通的 Md.find(id) 进行查询。

于 2013-09-11T00:29:54.713 回答
0

使用这个:

编辑#1 仍然不是很好,但稍微重写一下,至少更干净一点:

  def show
    unless ['terms', 'privacy','press','cookies', 'help'].include?(params[:page])
      redirect_to root_path
    else
      begin
        @content  = File.read("#{Rails.root}/app/views/static/#{ params[:page] }.#{ locale }.md")
        @title    = File.open("#{Rails.root}/app/views/static/#{ params[:page] }.#{ locale }.md", &:readline)
      rescue
        @content  = File.read("#{Rails.root}/app/views/static/#{ params[:page] }.en.md")
        @title    = File.open("#{Rails.root}/app/views/static/#{ params[:page] }.en.md", &:readline)
      end
      render :show
    end
  end

欢迎任何建议

于 2013-09-27T19:22:58.233 回答