在Ruby on Rails中提取字符串的子集

时间:2015-09-06 15:43:22

标签: ruby-on-rails ruby

在我的Ruby应用程序中,我有一个我用AWS设置的文件上传。将上传的文件显示给用户时,我只想显示上传文件的名称,而不是整个文件。

在我看来,我正在使用:

<td>
    <%= link_to file.file_url.split('/').last, file.file_url, target: '_blank' %>
</td>

其中输出File_name.pdf而不是https://bucket_name.s3-us-west.../file_name.pdf,这正是我需要的。

但是,对于某些文件上传,文件名后面附加了参数,因此我得到File_name.pdf?AWSAccessKeyID=1234&Expires=1234之类的内容。当在视图中显示时,看起来很难看。

我想在最后一个尾部斜杠处拆分文件URL字符串,然后再在“?”处拆分。我尝试过slashchomp但似乎无法正确格式化。这是合适的方法吗?

2 个答案:

答案 0 :(得分:3)

你应该创建一个帮助器,它将file.file_url转换为&#34; File_name.pdf&#34;,它将如下所示:

def aws_file_name(url)
  uri = URI.parse(url) # =>  #<URI::HTTPS https://bucket_name.s3-us-west/.../File_name.pdf?AWSAccessKeyID=1234&Expires=1234>
  File.basename(uri.path) # => "File_name.pdf"
end

然后:

<%= link_to aws_file_name(file.file_url), file.file_url, target: '_blank' %>

答案 1 :(得分:0)

第一次出现new_str = str.slice(0..(str.index('?')))后,

?将剪切文件名 其中str是您当前的文件名,new_str将是剪切版本。

//编辑
new_str仍将包含?
如果您不希望发生这种情况,请尝试使用new_str = str.split('?')[0]