1

所以,我仍在努力掌握 ROR 的窍门。我的参与很少。致力于修复和扩展以前创建的应用程序。因此,我的知识存在一些空白,我相信这也会阻止我对信息进行必要的词汇和技术识别来搜索 google/stack/etc 以获得适当的答案。所以请容忍我在这里。

我的问题很简单。我目前正在遍历文件列表,并使用下载所述文件的链接填充无序列表(准确地说是.log 文件)。一切都正确显示,但链接本身不正确。所以问题是,如果我点击 log1.log 链接,它会带我到http://blahblah.blah/lot/log/folder/log1.log哪个向我显示Rails: File rout not correct (No route matches [GET] "/lot/log/folder/log1.log")错误。所以我想,“让我们确保正确的链接将我带到我需要去的地方”,我将浏览器中的 url 更改为http://blahblah.blah/log/folder/log1.log。果然这也不起作用……我一定不明白 Rails 如何处理目录结构。

所以我没有找到合适的路线......这一定很简单,我晚上失眠了,我的家庭生活正在分崩离析(真的只有几个小时)。我怎样才能解决这个问题?

这是供参考的代码:

<h1>User Log</h1>

<div class="modal">
<!-- _results.html.erb loads here -->
</div>
<div class="form-container">
  <div class="wrapper">
    <% Dir["log/*/*.log"].each do |file| %>
    <li><%= link_to file, file %></li>
    <% end %>
 </div>
</div>

这些文件位于文件夹中按月份指定的log文件夹中。

例如 app/log/sept2013/log1.log。

总而言之-我做错了什么,我对路线不了解什么?我有哪些解决方案以及访问和显示目录和文件的常见做法是什么?

神速

编辑 - 根据请求,routes.rb

App::Application.routes.draw do  

resources :alerts

# Users
devise_for :users, :path_prefix => 'auth', :controllers => { :passwords =>     'users/passwords', :sessions => 'users/sessions' }
devise_scope :user do
get '/login' => 'users/sessions#new'
end
match '/users/me' => 'users#me'
resources :users

# Facilities
resources :facilities

# Lab Methods
resources :lab_methods

# Products
resources :products

# Qualities / Quality Control
match 'quality-assurance/modal' => 'quality#modal'
resources :qualities, :path => 'quality-assurance', :controller => 'quality'

# Quality History
resources :quality_histories, :path => 'quality-history', :controller => 'quality_histories'

# Lots
match 'lot/certificate_review' => 'lot#certificate_review'
match 'lot/:action', :controller => 'lot'
match 'lot/:action/:id', :controller => 'lot'

# Other
match 'dashboard' => 'main#dashboard'
match 'reporting' => 'main#reporting'
match 'settings' => 'main#settings'
match 'search' => 'main#search'
match 'search.xlsx' => 'main#search.xlsx'
match 'options' => 'main#options'

# Root
root :to => 'main#dashboard'

get "lot/user_log" 

end
4

1 回答 1

3

您只能直接访问“公共”文件夹中的文件。不过,您可以执行以下操作:

  1. 创建一个具有获取日志的操作的新控制器。

  2. 将路线添加到此新操作

  3. 将您的链接指向此路线

控制器操作可能如下所示:

class LogsController < ApplicationController
  def log
    send_file "log/#{params[:log_file]}"
  end
end

路线:

get "/log/:log_file", :to => 'logs#log', :constraints => {:log_file => /.*/}

注意约束选项,它允许 log_file 参数包含斜杠

于 2013-09-17T23:02:55.253 回答