Ruby on rails 未定义的局部变量或方法-下载文件-Ruby on Rails

Ruby on rails 未定义的局部变量或方法-下载文件-Ruby on Rails,ruby-on-rails,ruby,download,link-to,Ruby On Rails,Ruby,Download,Link To,我正在尝试在rails中嵌入一个可下载的文件。但得到以下错误: ActionView::Template::Error(未定义的局部变量或#的“home_download_pdf_url”方法): home_controller.rb def download_pdf send_file( "#{Rails.root}/public/Brochure.pdf", filename: "Brochure.pdf", type: "application/pdf"

我正在尝试在rails中嵌入一个可下载的文件。但得到以下错误:

ActionView::Template::Error(未定义的局部变量或#的“home_download_pdf_url”方法):

home_controller.rb

def download_pdf
  send_file(
    "#{Rails.root}/public/Brochure.pdf",
     filename: "Brochure.pdf",
     type: "application/pdf"
  )
end
routes.rb

 get 'home/download_pdf'
view.html

<%= link_to 'Download Brochure', home_download_pdf_url>

我对Ruby是新手。请帮忙

将您的操作用作

下载pdf

因此,链接可以更改为

link_to "Download Brochure", controller: "home", action: "download_pdf"

如果您使用的是较旧的Rails,请确保在更改路由后重新启动服务器。您还可以尝试其他路由语法
get'home/download\u pdf'=>'home\35; download\u pdf'
,运行
rake routes
,以确保看到类似
home\u download\u pdf get/home/download\u pdf(:format)home\35; download\u pdf
的行。您可能还可以直接链接到该文件,因为它位于“下载手册”、“小册子.pdf”的公共目录中,您对该视图的检查可能是
,我已经有一段时间没有查看rails了,但我希望它在那里有一个类名。通常视图文件是
view.html.erb
,而不是
view.html
,而且文件名有点可疑,从rails根目录到文件的完整路径是什么?我期待类似于
app/views/home/index.html.erb的东西,通常文件名将位于以控制器命名的目录中(因此为home),文件将以操作命名(呈现它的控制器方法)。这些约定存在偏差,但我无法判断您的是否属于其中之一。

错误很简单,这意味着您没有使用所引用的“名称”定义路由:

#config/routes.rb
get "home/download_pdf", to: "home#download_pdf", as: :home_download_pdf

#app/controllers/home_controller.rb
class HomeController < ApplicationController
  def download_pdf
    # ...
  end
end

#app/views/home/download_pdf.html.erb
<%= 'Download Brochure', home_download_pdf_path %>
--

如果您必须使用
home
控制器等,您最希望将任何额外的路由嵌入到指令中:

#config/routes.rb
resources :home, only: [] do
  get :home_download_pdf, on: :collection #-> url.com/home/home_download_pdf
end

您的routes.rb文件中是否有下载pdf条目?如果是这样,那么您需要在_url方法中将操作放在控制器名称前面。所以,它应该是下载\ pdf \主页\ url。尝试一下,看看你是否参与了控制器的操作。
确保你正确地关闭了标签。为了子孙后代的利益,如果它起作用,你会想要接受答案
#config/routes.rb
resources :home, only: [] do
  get :home_download_pdf, on: :collection #-> url.com/home/home_download_pdf
end