Javascript rails 6中没有多个路由参数的路由匹配

Javascript rails 6中没有多个路由参数的路由匹配,javascript,jquery,ruby-on-rails,ajax,jrubyonrails,Javascript,Jquery,Ruby On Rails,Ajax,Jrubyonrails,routes.rb: get '/get_text_by_tablenum/:filename_id/:tablenum_id', to: 'dashboard#get_text_by_tablenum' 阿贾克斯: 耙道: GET /get_text_by_tablenum/:filename_id/:tablenum_id(.:format) dashboard#get_text_by_tablenum 错误消息: No route matches [GET] "/get_t

routes.rb:

get '/get_text_by_tablenum/:filename_id/:tablenum_id', to: 'dashboard#get_text_by_tablenum'
阿贾克斯:

耙道:

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"

关于我为什么会收到此错误消息,您有什么想法吗?

很简单,您的资源必须位于URL的末尾。
MPLX\u 1Q20\u Conf\u Call\u Slides.pdf
它是一个文件,而不是路径

示例

get "path/to/file.pdf", to: "my_controller#action"`

该点已删除,因为它用作格式化路由的分隔符。如果需要在:文件名中使用点,请添加约束<代码>约束:{filename://.*/}

现在,您的路线如下所示:

  get 'files/:filename', to: "files#index", constraints: { filename: /.*/ }
然后在浏览器中: http://localhost:3000/files/MPLX_1Q20_Conf_Call_Slides.pdf

文件\u 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>
app/controllers/files\u controller.rb
1:类FileController<应用程序控制器
2:def索引
3:byebug
=>4:filename=params[:filename]
5:发送_文件(“#{Rails.root}/private/#{filename}”,
6::filename=>“#{filename}”,
7::type=>“application/pdf”,例如如果是pdf
8::disposition=>'inline')
9:完
10:完
(byebug)参数
“文件”、“操作”=>“索引”、“文件名”=>“MPLX\u 1Q20\u Conf\u Call\u Slides.pdf”}允许:false>

奇怪的是,我只需要颠倒顺序:filename\u id和:tablenum\u id就可以了。谢谢你的回答。这就是解决办法。相关的,知道为什么从控制器内的“params[:filename_id]”中删除.pdf扩展名吗?删除点是因为它用作格式化路由的分隔符。如果需要在:文件名中使用点,请添加约束。约束:{filename://.*/}
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>