Ruby on rails 未定义的局部变量或方法-下载文件-Ruby on Rails
我正在尝试在rails中嵌入一个可下载的文件。但得到以下错误: ActionView::Template::Error(未定义的局部变量或#的“home_download_pdf_url”方法): home_controller.rbRuby 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"
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