rails 6中没有针对多个路线参数的路线匹配
Posted
技术标签:
【中文标题】rails 6中没有针对多个路线参数的路线匹配【英文标题】:No Route Matching in rails 6 for multiple route parameters 【发布时间】:2020-11-16 06:20:24 【问题描述】:routes.rb:
get '/get_text_by_tablenum/:filename_id/:tablenum_id', to: 'dashboard#get_text_by_tablenum'
ajax:
$.ajax(
dataType: "json",
cache: false,
url: '/get_text_by_tablenum/' + filename + '/' + id_value_string,
timeout: 5000,
error: function(XMLHttpRequest, errorTextStatus, error)
alert("Failed to submit : " + errorTextStatus + " ;" + error);
,
success: function(data)
console.log(data)
耙路线:
GET /get_text_by_tablenum/:filename_id/:tablenum_id(.:format) dashboard#get_text_by_tablenum
错误信息:
No route matches [GET] "/get_text_by_tablenum/MPLX_1Q20_Conf_Call_Slides.pdf/12"
对我收到此错误消息的原因有何想法?
【问题讨论】:
奇怪,我只需要颠倒顺序 :filename_id 和 :tablenum_id 就可以了。 【参考方案1】:很简单,您的资源必须位于 URL 的末尾。
MPLX_1Q20_Conf_Call_Slides.pdf
是文件而不是路径。
示例:
get "path/to/file.pdf", to: "my_controller#action"`
点已被删除,因为它用作格式化路线的分隔符。如果您需要在 :filename 中使用点,请添加一个约束。 constraints: filename: /.*/
现在您的路线如下所示:
get 'files/:filename', to: "files#index", constraints: filename: /.*/
然后在浏览器中: http://localhost:3000/files/MPLX_1Q20_Conf_Call_Slides.pdf
files_controller.rb
app/controllers/files_controller.rb
1: class FilesController < ApplicationController
2: def index
3: byebug
=> 4: filename = params[:filename]
5: send_file("#Rails.root/private/#filename",
6: :filename => "#filename",
7: :type => "application/pdf", #for example if pdf
8: :disposition => 'inline')
9: end
10: end
(byebug) params
<ActionController::Parameters "controller"=>"files", "action"=>"index", "filename"=>"MPLX_1Q20_Conf_Call_Slides.pdf" permitted: false>
【讨论】:
感谢您的回答。这就是解决方案。相关,知道为什么 .pdf 扩展名会从控制器内的“params[:filename_id]”中删除吗? 点已被删除,因为它用作格式化路线的分隔符。如果您需要在 :filename 中使用点,请添加一个约束。约束: 文件名:/.*/以上是关于rails 6中没有针对多个路线参数的路线匹配的主要内容,如果未能解决你的问题,请参考以下文章
带有设计的 Rails 3:没有路线匹配 /d/users/sign_out
Rails 3.2.13 - 没有路线匹配 [GET] "/js/jquery.fancybox.js"