【问题标题】:How to change default :id in address to :filename如何将地址中的默认 :id 更改为 :filename
【发布时间】:2019-07-20 13:58:35
【问题描述】:

您好,我是 Rails 新手,正在寻找如何更改默认地址的解决方案

http://0.0.0.0:3000/files/5

http://0.0.0.0:3000/files/filename

http://0.0.0.0:3000/files/5+filename+sometext

我正在使用 ActiveStorage 存储文件,我更喜欢使用 blob 表中的文件名。

我在哪里可以找到解决方案?路线?

【问题讨论】:

标签: ruby-on-rails rails-activestorage


【解决方案1】:

我认为https://guides.rubyonrails.org/routing.html#non-resourceful-routes 拥有你想要的答案。

您需要一个非资源丰富的动态路由。

get 'files/:file_name', to: 'files#serve_file' # , constraints: { file_name: /regex_here/ }

然后 'files/your_file_name' 将路由到文件控制器的 serve_file 操作,params 将具有 { file_name: 'your_file_name' }。然后,您可以根据需要处理提供文件。

确保将这条路线放在您的resources :files 上方,否则我相信它不会起作用,并且请注意这条路线会阻塞一些资源丰富的路线。例如,url 'files/new' 将被路由到带有参数的 files#serve_file:{ file_name: 'new' }。

一种解决方案是在路由中添加一个额外的静态段。

get 'files/serve/:file_name', to: 'files#serve_file'

另请注意,从文档中:

默认情况下,动态段不接受点 - 这是因为 dot 用作格式化路线的分隔符。如果您需要使用 点在动态段中,添加一个覆盖它的约束 - 例如, id: /[^/]+/ 允许除斜线以外的任何内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 2011-01-23
    • 1970-01-01
    • 2021-10-09
    • 2018-02-17
    • 2010-10-22
    相关资源
    最近更新 更多