RoR HTML 模板到 .docx
RoR HTML template to .docx
我需要从 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 目标是 url:
<%= 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
has been removed to an individual gem, so I installed the responders gem,但是,我得到了同样的错误。
由于 respond_to 已从 rails 4.2 中删除给个人 gem 我建议您使用格式化程序 gem..
有关详细信息,您可以查看下面给出的 link。
Why is respond_with being removed from rails 4.2 into it's own gem?
你试过caracal-rails吗?你可以找到它here
今年早些时候,我不得不在一个应用程序中构建相同的功能,并且还使用了 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
然后我有两个 "view" 文件发挥作用。首先,是我的方法视图文件 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
对于冗长的回复深表歉意...这对我来说效果很好,我希望能帮助您解决这个问题!
所以,我想通了。我在路线中添加了 format: 'docx'
,现在可以使用了。
Note: as @kajalojha mentioned, respond_with / Class-Level respond_to
has been removed to an individual gem, so I 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 来触发下载逻辑:
<%= link_to 'Download bar.docx', foo_download_path %>
这将下载包含 "Lorem Ipsum" 的 bar.docx
文件。
我需要从 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 目标是 url:
<%= 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
has been removed to an individual gem, so I installed the responders gem,但是,我得到了同样的错误。
由于 respond_to 已从 rails 4.2 中删除给个人 gem 我建议您使用格式化程序 gem..
有关详细信息,您可以查看下面给出的 link。
Why is respond_with being removed from rails 4.2 into it's own gem?
你试过caracal-rails吗?你可以找到它here
今年早些时候,我不得不在一个应用程序中构建相同的功能,并且还使用了 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
然后我有两个 "view" 文件发挥作用。首先,是我的方法视图文件 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
对于冗长的回复深表歉意...这对我来说效果很好,我希望能帮助您解决这个问题!
所以,我想通了。我在路线中添加了 format: 'docx'
,现在可以使用了。
Note: as @kajalojha mentioned,
respond_with / Class-Level respond_to
has been removed to an individual gem, so I 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 来触发下载逻辑:
<%= link_to 'Download bar.docx', foo_download_path %>
这将下载包含 "Lorem Ipsum" 的 bar.docx
文件。