2016-05-11 9 views
1

Ich muss eine .docx Datei aus einer HTML-Vorlage erstellen, also habe ich htmltoword gem.RoR HTML-Vorlage zu .docx

Verbrauch:

ich das Juwel hinzugefügt (Gemfile):

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

ich eine Route setzen (route.rb):

get 'preview' => 'foo#preview' 

Und in meinem bar.html.erb Ich habe einen Link, welcher Ziel die URL:

<%= link_to '.docx', preview_path %> 

Vorlage (preview.docx.erb):

<h1>foobar</h1> 

Und in der Steuerung (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 

Aber ich bekomme einen Fehler:

ActionController::UnknownFormat

Wie behebt man diesen Fehler?

Meine config:
RoR V4.2.4
Rubin v2.2.3p173


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


aktualisieren: wie @kajalojha erwähnt, hat respond_with/Class-Level respond_to zu einem individuellen Schmuckstück entfernt worden ist, so dass ich installed the responders gem aber ich bekomme den gleichen Fehler.

Antwort

0

Also, ich habe es herausgefunden. Ich habe format: 'docx' zur Route hinzugefügt und es funktioniert jetzt.

Note: as @kajalojha mentioned, respond_with/Class-Level respond_to has been removed to an individual gem, so I installed the responders gem .

Lassen Sie uns eine download Logik erstellen.

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> 

Und ich habe einige Links zu triggern der Download-Logik hinzugefügt:

<%= link_to 'Download bar.docx', foo_download_path %> 

, die die bar.docx Datei mit "Lorem Ipsum" in ihm herunterladen.

0

Da respond_to wurde von Schienen 4.2 zu einer einzelnen Perle entfernt Ich werde empfehlen Sie Formatierer Juwel zu verwenden ..

Weitere Einzelheiten entnehmen Sie auf den unten angegebenen Link aussehen kann.

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

+0

Können Sie vorschlagen, welches Juwel zu verwenden? – Vucko

+0

Formatierer Gem .. –

+0

Ich versuche es zu finden, aber ohne Glück. Kannst du bitte einen Link posten? – Vucko

0

Haben Sie Karakal-Schienen versucht? Sie können es finden here

0

Ich musste die gleiche Funktionalität in einer App in diesem Jahr zu bauen und auch die htmltoword gem verwendet.

# 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 

Ich habe dann zwei "View" -Dateien, die ins Spiel kommen. Die erste ist meine Methodenansichtsdatei download.docx.haml.Diese Datei enthält den folgenden Code:

%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 } 

Von dort habe ich eine andere Datei name_of_my_word_template.docx.haml, die das Fleisch meines Word-Datei enthält.

%h4 Header 
%h5 Subheader 
%div= local_var.method 
%div Some other content 
%div More content 
%div Some footer content 

Wenn jemand my_app.com/controller_name/download.docx trifft, eine Word-Datei wird für sie erzeugt und heruntergeladen.

Um dies geschieht, um sicherzustellen, habe ich einen Weg für die Download-Methode in meiner routes.rb Datei:

resources :model_name do 
    member do 
    get :download 
    end 
end 

Entschuldigung für die lange Antwort ... das gut für mich gearbeitet hat, und ich hoffe, Sie hilft durch dieses Problem!

+0

Auch das gleiche Problem. Welche RoR-Version hast du benutzt? Hast du "responders" gem in dieses Projekt aufgenommen? – Vucko

+0

Ich bin auf Schienen 4.2.6 und schließe das Responder-Juwel in mein Projekt ein. Tut mir leid, es hat nicht geholfen! –

+0

Ich habe es gelöst, indem ich den 'format: 'docx'-Teil der Route hinzugefügt habe. Überprüfen Sie meine Antwort und fühlen Sie sich frei, etwas hinzuzufügen, wenn ich verpasst habe :) – Vucko