gpt4 book ai didi

ruby-on-rails - 如何创建一个临时文件并写入它然后允许用户下载它?

转载 作者:行者123 更新时间:2023-12-03 16:06:40 25 4
gpt4 key购买 nike

我正在开发我的第一个应用程序,我需要一些帮助来允许我的用户下载包含页面上显示的某些变量的文本文件。

以购物 list 为例。
假设您允许您的用户创建产品的购物 list ,然后在购物 list 页面上显示带有商品的购物 list ,
例如本地主机:3000/list/my-list

看看下面的示例代码(这可能是不正确的):

File.open('shopping_list.txt', 'w') do |file|
file.puts 'Item 1: #{product_1.name}'
file.puts 'Item 2: #{product_2.name}'
file.puts 'Item 3: #{product_3.name}'
end

然后创建一个具有以下内容的文本文件:
Item 1: Eggs
Item 2: Butter
Item 3: Bread

然后用户应该能够通过下载链接下载这个文件(我不希望这个文件存储在服务器上)。

我不知道如何实现这一点,但我希望你们能指导我。 :D

TL;博士
  • 创建填充模型数据的文本文件(也许创建一种方法来实现这一点?)
  • 文本文件不应存储在服务器上,而是在用户单击下载按钮时创建(不确定这是否是 Rails 方式,但也许有人可以告诉我更好的方式)
  • 最佳答案

    我假设有 List 的资源具有 name 属性作为列表的名称和列表 has_many具有属性 description 的项目

    首先,创建一个下载路径改变你的路线 config/routes.rb

    resources :lists do
    member {get "download"}
    end

    现在,如果您运行 rake routes在控制台中,您应该看到类似的路线
    /lists/:id/download

    更重要的是你现在应该有助手 download_list_url & download_list_path在您的 View 中使用
    <ul>
    <% @lists.each do |list| %>
    <li> <%= list.name %> - <%= link_to 'Download List', download_list_path(list) %> </li>
    <% end %>
    </ul>

    在您的 lists_controller添加操作,因为您实际上不想将文件保留在服务器磁盘上,因此只需将数据作为字符串流式传输
    def download
    list = List.find(params[:id])
    send_data list.as_file,
    :filename => "#{list.name}.txt",
    :type => "text/plain"
    end

    最后你看到我使用了 as_file你应该添加到模型中的方法(我不喜欢在 Controller 、胖模型、瘦 Controller 中做这些事情)。所以在 List模型
    def as_file
    output = [self.name]
    self.items.each {|item| output << item.description }
    output.join("\n")
    end

    关于ruby-on-rails - 如何创建一个临时文件并写入它然后允许用户下载它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8662250/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com