2016-05-11 6 views
1

Мне нужно создать файл .docx из HTML-шаблона, поэтому я использовал htmltoword gem.RoR HTML-шаблон для .docx

Использование:

Я добавил камень (Gemfile):

gem 'htmltoword', '~> 0.5.1' #last version of the gem 

Я положил маршрут (route.rb):

get 'preview' => 'foo#preview' 

И в моем bar.html.erb У меня есть ссылка, которая предназначена для этого 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 

Однако я 'm получение ошибки:

ActionController::UnknownFormat

Как исправить эту ошибку?

Мой конфиг:
RoR v4.2.4
Рубин v2.2.3p173


Also, there is an open github issue for this/similar topic.


Update: в @kajalojha упоминался, respond_with/Class-Level respond_to был удален с индивидуальным драгоценным камнем, так что я installed the responders gem, однако, я получаю ту же ошибку.

ответ

0

Итак, я понял. Я добавил 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_to 'Download bar.docx', foo_download_path %> 

Какой будет скачать файл bar.docx с "Lorem Ipsum" в нем.

0

С respond_to была удалена с рельсов 4.2 до индивидуальной жемчужины я рекомендую вам использовать форматтер камень ..

Для получения более подробной информации вы можете посмотреть по ссылке, приведенной ниже.

Why is respond_with being removed from rails 4.2 into it's own gem?

+0

Можете ли вы предложить, какой драгоценный камень использовать? – Vucko

+0

formatter gem .. –

+0

Я пытаюсь найти его, но без везения. Не могли бы вы разместить ссылку? – Vucko

0

Вы пробовали Каракал-рельсы? Вы можете найти его here

0

Мне пришлось создать эту же функциональность в приложении в начале этого года, а также использовать драгоценный камень htmltoword.

# 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 

У меня тогда есть два файла «просмотра», которые вступают в игру. Во-первых, это мой файл с видом метода 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, файл Слово и загрузит для них.

Для того, чтобы обеспечить это произойдет, у меня есть маршрут для метода загрузки в моем routes.rb файле:

resources :model_name do 
    member do 
    get :download 
    end 
end 

Извиняется за долгий ответ ... это работает хорошо для меня, и я надеюсь, что поможет вам через эту проблему!

+0

Также та же проблема. Какую версию RoR вы использовали? Вы включили в этот проект «респондентский камень»? – Vucko

+0

Я нахожусь на Rails 4.2.6 и включил в свой проект камень-ответчик. Извините, это не помогло! –

+0

Мне удалось решить эту проблему, добавив часть 'format: 'docx'' к маршруту. Проверьте мой ответ и не стесняйтесь что-то добавить, если я пропустил :) – Vucko

Смежные вопросы