Ruby on rails 如何将用户id附加到Rails文件上载?

Ruby on rails 如何将用户id附加到Rails文件上载?,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在开发一个应用程序,用户可以上传csv文件,将数据加载到我们的平台上。我有一个允许用户上传文件的表单和一个将文件保存在指定文件夹中的方法。我想将用户id附加到文件名。我该怎么做 我的表格: <%= form_tag import_listings_path, multipart: true do %> <%= file_field_tag :my_file %> <%= hidden_field_tag :user_id, current_use

我正在开发一个应用程序,用户可以上传csv文件,将数据加载到我们的平台上。我有一个允许用户上传文件的表单和一个将文件保存在指定文件夹中的方法。我想将用户id附加到文件名。我该怎么做

我的表格:

<%= form_tag import_listings_path, multipart: true do %>
    <%= file_field_tag :my_file %>
    <%= hidden_field_tag :user_id, current_user.id %>
    <%= submit_tag "Import CSV" %>
<% end %>

例如,如果用户上载test.csv且其用户id为20。我希望新的文件名是test20.csv,有点难看,但这应该可以做到。。。基本上提取文件扩展名,获取“.”之后的最后一个字符串,追加用户id并重新添加扩展名:

x = params[:my_file].original_filename.split('.')
x[x.length - 2] += params[:user_id] 
file = File.join("public", x.join('.'))

好吧,所有的代码都在那里。你尝试过做什么改变?注意本地文件路径file=.的生成。。及时使用。然而,希望保存附加的用户id听起来像是更大的设计问题,应该加以解决;用户可能无法写入同一目录。我尝试了params[:my_file]。原始_filename+params[:user_id],但这给了我test.csv20-我希望文件名为test20.csv。我尝试将用户参数放在文件参数之后,但它给了我一个错误。您可以使用结合串联的。请参阅Fileextname和Filebasename。从IRB/REPL开始,给定id=20;s=foo.csv,如果使用上述方法,将如何生成字符串foo_20.csv?非常接近。我得到test.20csv-如何在测试之前移动20。?应该是一个简单的解决方案,但我不理解你的部分代码。这根本不是一个好的解决方案。正如@user2864740在对问题的评论中提到的,Ruby std库中有内置方法。使用这些方法来获得所需的结果。此外,如果文件名包含点,此解决方案将中断。出于这些原因,投票否决此项。如果文件名包含点,则带点的连接“.”会再次将其添加回去!然而,正如穆萨指出的那样,在编辑之前,它修改了扩展名而不是文件名。我没有说这是一个完美的解决方案,但它是有效的。
x = params[:my_file].original_filename.split('.')
x[x.length - 2] += params[:user_id] 
file = File.join("public", x.join('.'))