我需要从HTML模板创建 .docx 文件,因此我使用了htmltoword gem。
用法:
我添加了gem( Gemfile ):
gem 'htmltoword', '~> 0.5.1' #last version of the gem
我放了一条路线( route.rb ):
get 'preview' => 'foo#preview'
在我的 bar.html.erb 中,我有一个指向该网址的链接:
<%= link_to '.docx', preview_path %>
模板( preview.docx.erb ):
<h1>foobar</h1>
在控制器( foos_controller.rb )中:
class FoosController < ApplicationController
respond_to :docx
#other code
def preview
respond_to do |format|
format.docx do
render docx: 'foobar', filename: 'preview.docx'
end
end
end
end
但是,我收到了错误:
的ActionController :: UnknownFormat
如何解决此错误?
我的配置:
RoR v4.2.4
Ruby v2.2.3p173
Also, there is an open github issue for this/similar topic
更新:正如@kajalojha所提到的,respond_with / Class-Level respond_to
已被移除到单个gem,所以我installed the responders gem,但是,我得到了相同的错误。
答案 0 :(得分:0)
由于respond_to已从rails 4.2移除到单个gem,我将建议您使用formatter gem ..
有关详细信息,请查看以下链接。
Why is respond_with being removed from rails 4.2 into it's own gem?
答案 1 :(得分:0)
答案 2 :(得分:0)
我必须在今年早些时候在应用程序中构建相同的功能,并且还使用了htmltoword
gem。
# At the top of the controller:
respond_to :html, :js, :docx
def download
format.docx {
filename: "#{dynamically_generated_filename}",
word_template: 'name_of_my_word_template.docx')
}
end
然后我有两个&#34;查看&#34;发挥作用的文件。第一个是我的方法视图文件download.docx.haml
。该文件包含以下代码:
%html
%head
%title Title
%body
%h1 A Cool Heading
%h2 A Cooler Heading
= render partial: 'name_of_my_word_template', locals: { local_var: @local_var }
从那里,我有另一个文件name_of_my_word_template.docx.haml
,其中包含我的Word文件的内容。
%h4 Header
%h5 Subheader
%div= local_var.method
%div Some other content
%div More content
%div Some footer content
当有人点击my_app.com/controller_name/download.docx
时,会为他们生成并下载Word文件。
为了确保这一点,我在routes.rb
文件中有下载方法的路线:
resources :model_name do
member do
get :download
end
end
长期回复道歉......这对我来说效果很好,我希望能帮助你解决这个问题!
答案 3 :(得分:0)
所以,我明白了。我在路线中添加了format: 'docx'
,现在可以正常使用了。
注意:正如@kajalojha所提到的,
respond_with / Class-Level respond_to
已被移除到单个gem,因此我installed the responders gem。
让我们创建一个download
逻辑。
的Gemfile
gem 'responders'
gem 'htmltoword', '~> 0.5.1'
的routes.rb
get 'download' => 'foos#download', format: 'docx' #added format
foos_controller.rb
class FoosController < ApplicationController
respond_to :docx
def download
@bar = "Lorem Ipsum"
respond_to do |format|
format.docx do
# docx - the docx template that you'll use
# filename - the name of the created docx file
render docx: 'download', filename: 'bar.docx'
end
end
end
end
download.docx.erb
<p><%= @bar %></p>
我已经添加了一些链接来触发下载逻辑:
<%= link_to 'Download bar.docx', foo_download_path %>
将使用&#34; Lorem Ipsum&#34;下载bar.docx
文件。在它。