我有一个应用程序,它从数据库中获取文件的路径并将其呈现为 html 并显示。控制器、视图和路由如下所示:
project/index.html.erb
<p><%= link_to project.title,{:controller => "markdowns" , :action => 'view', :github_link=>project.github_link},:target=>"_blank"%></p>
markdown_controller
class MarkdownsController < ApplicationController
def view
@markdown=MarkdownsHelper.markdown path
end
def path
File.open(Rails.public_path.to_s+params[:github_link].to_s, "rb").read
end
end
上述控制器中的 MarkdownsHelper.markdown 方法渲染 .md。
markdown/view
<%=raw @markdown %>
routes
resources :projects
match '/GitRepos/'=>'markdowns#view'
问题:
单击 prokects/index 中的标题后显示的链接是localhost:3000/GitRepos?github_link=%2FGitRepos%2Fbootstrap%2FREADME.md
但我希望链接显示为localhost:3000/GitRepos/bootstrap/Readme.md
其中 bootstrap 是 Project.title 而 Readme.md 是正在读取的文件。另外,我的项目数据库有一个 github_link 属性,它存储GitRepos/bootstrap/Readme.md
模型
链接会根据项目而变化。Project 模型具有这些属性-> 标题和 github_link。所以项目很多,github_link存储了每个项目的Readme.md文件在本地系统中的路径地址。
我的方法
这是我拥有的解决方案,我对 Ruby on Rails 的了解很少。请让我知道是否可以改进这一点。
project/index.html.erb
<p><%= link_to project.title,{:controller => "markdowns" , :action => 'view',:title=>project.git_name,:id=>project.git_file},:target=>"_blank" %></p>
routes
match 'GitRepos/:title/:id' =>'markdowns#view'