【发布时间】:2014-11-21 21:42:59
【问题描述】:
这是我使用 Rails 的第一天,甚至是我使用 Ruby 编程的第一天,所以我不确定 Ruby 社区使用的很多做法。
我正在尝试上传此文件并将给定文件存储在一个文件夹中,并将该文件的路径存储在数据库中。我所拥有的一切都很好,但我不确定我是否遇到了一些重大的禁忌。
我最关心的一行是我这样做的地方:
params[:config][:url] = File.join("public/data/configs", params[:config][:file].original_filename)
这里是create方法的完整代码:
params[:config][:url] = File.join("public/data/configs", params[:config][:file].original_filename)
@map = Map.find(params[:map_id])
@config = @map.map_config.new(map_config_params)
if @config.valid?
File.open(params[:config][:url], "wb") { |f| f.write(params[:config][:file].read) }
@config.save
redirect_to map_path(@map)
else
render 'new'
end
还有map_config_params 方法:
private
def map_config_params
params.require(:config).permit(:name, :url)
end
【问题讨论】:
-
如果您要使用
"public/data/configs",几乎没有理由使用File.join,这对于自动为特定操作系统提供路径分隔符很有用。照原样,如果在 Windows 上运行,您的代码最终可能会返回一个由正斜杠和反斜杠组成的非常混乱的路径。 Ruby 足够聪明,知道所有正斜杠的路径名都需要在 Windows 上进行转换,因此可以简单地join('/')一个由值组成的数组或简单地插入字符串和变量。 -
不使用
open、write和read来复制文件,为什么不使用FileUtils.cp呢?并且,您可能会考虑在放置目录中累积文件的问题。也许FileUtils.mv会更好? -
@theTinMan "public/data/configs" 在我开始工作时只是暂时的,但感谢您的建议,我会进一步阅读。
标签: ruby-on-rails ruby file-upload