我需要更改我的:url,:path,:default所以我可以访问controllers目录中的example-data.csv文件.目前它将我的example_data.csv文件存储在public / origin / example_data.csv中.
但我希望我的example_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 - 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.
让我们采取一步一步的方法:
您的第一个要求如下:
I need to change my :url,:path,:default_url so I can reach my example-data.csv file in the controllers directory.
是的,它可能.您当前的配置如下所示,只需正常工作,无需任何更改.
has_attached_file :csvdata,:default_url => "/controllers/original/example_data.csv"
但是这里有一些问题我想强调一下.通过上述设置,无论何时上传文件,它都将存储在application_folder / controllers / original / original目录下. path / original的最后一部分是由于:path选项中指定的样式.由于您没有为附件指定任何:styles选项,因此只会创建默认样式,即原始样式.
请注意,controllers文件夹位于应用程序根级别,这是一个不可公开访问的文件夹.
只能通过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"
注意:我从路径中删除/原始:style将创建原始文件夹.
否则,文件夹将是/ controllers / original / original / ..
通过上述设置,它都将存储在application_folder / public / controllers / original目录下.您可以在视图中通过简单的调用(如@ model_instance.csvdata.url)轻松访问上传的文件.例如,根据您的问题,您正在上传名为example_data.csv的文件,然后在您的视图中,您可以将其用作:
## Replace @model_instance with Model instance (contains `csvdata` attachment) <%= link_to "Example Data",@model_instance.csvdata.url %>
<a href="/controllers/original/example_data.csv?12345678">Example Data</a>
注意:?12345678是rails附加的随机种子.
关于:default_url
:default_url => "/controllers/:style/example_data.csv"
在配置中指定:default_url选项始终是一个好习惯.原因是如果用户在创建记录时没有上传文件但后来尝试访问该记录的上传文件,那么它们将被定向到default_url中设置的链接.另请注意,对于此特定记录,所有与附件相关的列都将设置为nil.
另外,我很困惑,当你想在应用程序中上传相同的文件时,为什么你希望default_url指向example_data.csv.标准方法是使用名为missing.csv或missing.png的默认文件,该文件与您上传的文件无关.请记住在/ controllers / original /文件夹中放置missing.csv或missing.png,即:default_url path.否则,点击链接后会出现错误.