Ruby on rails 4 回形针更改URL/路径

Ruby on rails 4 回形针更改URL/路径,ruby-on-rails-4,Ruby On Rails 4,我使用的是Rails4Ruby2.1.1 我需要更改我的:url、:path、:default,以便可以访问控制器目录中的example-data.csv文件。目前,它正在将我的example_data.csv文件存储在public/origin/example_data.csv中。 但我希望我的示例_data.csv文件保存在/controllers/original目录中 这就是我目前所拥有的 has_attached_file : csvdata, :url => "/contro

我使用的是Rails4Ruby2.1.1

我需要更改我的:url、:path、:default,以便可以访问控制器目录中的example-data.csv文件。目前,它正在将我的example_data.csv文件存储在
public/origin/example_data.csv
中。 但我希望我的示例_data.csv文件保存在/controllers/original目录中

这就是我目前所拥有的

has_attached_file :

csvdata, :url => "/controllers/original/:style/:basename.:extension",
         :path => ":rails_root/controllers/original/:style/:basename.:extension",
         :default_url => "/controllers/original/example_data.csv"

当我运行代码时,它不会将我的代码放在控制器目录中。

回形针
允许您在首选位置上载文件。您可以根据需要修改其选项,如
:url
:path
:default\u url

在我们进一步讨论之前,让我向您介绍一下这些选项的用途:

:url         - The full URL of where the attachment is publicly accessible. 

:path        - The files that are assigned as attachments are, by default, placed in the directory specified by this option.

:default_url - The URL that will be returned if there is no attachment assigned.

:styles      - A hash of thumbnail styles with geometries. If you need copies of uploaded files with particular dimensions then specify them here.

让我们在这里采取一步一步的方法: 您的第一个要求如下:

我需要更改我的:url、:path、:default\u url,以便可以访问控制器目录中的example-data.csv文件。

是的,这是可能的。如下所示的当前配置可以正常工作,无需任何更改

has_attached_file :csvdata, 
         :url => "/controllers/original/:style/:basename.:extension",
         :path => ":rails_root/controllers/original/:style/:basename.:extension",
         :default_url => "/controllers/original/example_data.csv"
但这里有一些我想强调的问题。通过上述设置,无论何时上载文件,它都将存储在应用程序文件夹/controllers/original/original目录下。路径/original的最后一部分是由于在
:path
选项中指定了
/:style
。由于您没有为附件指定任何
:样式
选项,因此只会创建默认样式,即
原始
。 请注意控制器文件夹位于应用程序根级别,这是一个不可公开访问的文件夹

只有在public文件夹(及其子文件夹)下上载的文件才能通过web浏览器访问。如果您不打算在视图中的任何位置显示上载的文件和/或只需要进行一些后台处理,则当前配置不需要任何更改。它现在可以正常工作了

如果这是您打算实现的,则无需采取进一步行动

但是如果您计划在web应用程序中显示或访问上载的文件,则需要将其放置在可通过浏览器访问的
公用
文件夹中。在这种情况下,您的代码将需要一些更改

## Update current configuration as below 
has_attached_file :csvdata, 
         :url => "/controllers/:style/:basename.:extension",
         :path => ":rails_root/public/controllers/:style/:basename.:extension",
         :default_url => "/controllers/:style/example_data.csv"
注意:我从路径中删除了
/original
,因为
:style
将创建
original
文件夹。 否则,文件夹将是
/controllers/original/original/。

通过上述设置,无论何时上载文件,它都将存储在应用程序文件夹/public/controllers/original目录下。您可以在视图中通过调用
@model\u instance.csvdata.url
轻松访问上传的文件。例如,根据您的问题,您正在上载一个名为
example\u data.csv
的文件,然后在您的视图中,您可以将其用作:

  ## Replace @model_instance with Model instance (contains `csvdata` attachment)  
  <%= link_to "Example Data", @model_instance.csvdata.url %> 
最好在配置中指定
:default\u url
选项。这样做的原因是,如果用户在创建记录时没有上载文件,但后来尝试访问该记录的
上载文件
,则他们将被定向到
默认url中设置的链接。另外,请注意,对于此特定记录,所有
附件
相关列都将设置为
nil


此外,我还感到困惑当您要在应用程序中上载相同的文件时,为什么您希望默认的\u url指向
example\u data.csv
。标准方法是使用名为
missing.csv
missing.png
的默认文件,该文件与上载的文件不关联。请记住将
missing.csv
missing.png
放入
/controllers/original/
文件夹中,即
:默认url
路径。否则,单击链接时会出现错误。

请查看我的问题?
  <a href="/controllers/original/example_data.csv?12345678">Example Data</a>
 :default_url => "/controllers/:style/example_data.csv"