Ho problema che è banalissimo, ma per me è stato uno sforzo enorme arrivare fino a dove sono arrivato. ad ogni modo: la mia applicazione con rails, funziona più o meno bene, sto studiano il modo di stampare in pdf. utilizzo pdf-write. devo salvare il file. quindi seguendo le api di pdf-writer: send_data _pdf.render, :filename => (invoice.number+".pdf"), :type => "application/pdf" io vorrei che il nome del file generato fosse quello di un campo di una tabella. nello specifico il nuemro di una fattura. nella tabella invoices o un campo chiamato number. quindi mi sembra logico richiamarla con invocie.number. perchè ottengo il messaggio di variabile o metodo inestente? grazie
on 2009-06-08 17:59
on 2009-06-08 18:41
"invoice" è già stato istanziato in qualche modo? altrimenti presumo sia normale che non lo riconosca... altra cosa, dovresti scrivere: invoice.number.to_s + ".pdf" se "number" è un valore integer, devi convertirlo in stringa per potergli aggiungere ".pdf" ciao =) A. jamba jamba ha scritto:
on 2009-06-08 21:03
Andrea Pavoni wrote: > "invoice" � gi� stato istanziato in qualche modo? altrimenti presumo sia > normale che non lo riconosca... > > altra cosa, dovresti scrivere: > > invoice.number.to_s + ".pdf" > > se "number" � un valore integer, devi convertirlo in stringa per potergli > aggiungere ".pdf" > > ciao =) > A. > > jamba jamba ha scritto: altra cosetta... invoice.number.to_s + ".pdf" come prestazioni è circa 10-20 volte + lento di "#{invoice.number}.pdf"
on 2009-06-08 21:32
Il giorno 8 giugno 2009 21.03, Alessandro Scolavino<scolas@gmail.com> ha scritto: > invoice.number.to_s + ".pdf" come prestazioni è circa 10-20 volte + lento di > "#{invoice.number}.pdf" consiglio anch'io questa forma, anche per motivi di leggibilità. per il resto scrivi il codice in questione o comunque una parte saliente. pietro.
on 2009-06-09 08:58
Pietro Giorgianni wrote: > Il giorno 8 giugno 2009 21.03, Alessandro Scolavino<scolas@gmail.com> > ha scritto: >> invoice.number.to_s + ".pdf" come prestazioni � circa 10-20 volte + lento di >> "#{invoice.number}.pdf" > > consiglio anch'io questa forma, anche per motivi di > leggibilit�. per il resto scrivi il codice in questione o comunque una parte > saliente. > > pietro. questo è la parte di codice incriminata def pdf @numero = Invoice.find(:all) _pdf = PDF::Writer.new _pdf.select_font "Times-Roman" _pdf.text "Prova", :font_size => 20, :justification => :left _pdf.line(50, 690, 560, 690).stroke send_data _pdf.render, :filename => (@numero+".pdf"), :type => "application/pdf" end
on 2009-06-09 09:12
Il giorno 9 giugno 2009 8.58, jamba jamba<faletra@gmail.com> ha scritto:
> end
Invoice.find(:all) restituisce un proxy, un oggetto che sa diventare
lista o iteratore o altro, ma non è certamente un numero. quando fai
@numero + ".pdf", ruby tenta di convertirli nello stesso tipo, e in
particolare cerca di trasformare ".pdf", stringa, in un array.
Ovviamente fallisce.
Forse hai fatto un po' di confusione, anche perché non credo tu voglia
stampare tutto in una volta; più probabilmente (correggimi se sbaglio)
vuoi stampare una fattura soltanto.
Se è così, probabilmente starai passando un id al metodo (vale a dire,
avrai una url tipo /invoice/pdf/3, o /invoice/3/pdf, o altro, e
all'interno del metodo quell'id sarà accessibile tramite params[:id].
Continuando con quest'ipotesi, il codice dovrebbe assomigliare a questo:
fattura = Invoice.find(params[:id])
...
send_data_pdf.render :filename =>
"#{fattura.campo_che_rappresenta_il_numero_della_fattura}.pdf", ...
Se ho preso una cantonata scrivi più dettagli.
pietro
on 2009-06-09 09:38
> fattura = Invoice.find(params[:id]) > ... > send_data_pdf.render :filename => > "#{fattura.campo_che_rappresenta_il_numero_della_fattura}.pdf", ... > > > > Se ho preso una cantonata scrivi pi� dettagli. > > pietro a questa soluzione c'ero già giunto, il problema e che come risultato ottengo: Couldn't find Invoice with ID=36303630
on 2009-06-09 09:40
Il giorno 9 giugno 2009 9.38, jamba jamba<faletra@gmail.com> ha scritto: > a questa soluzione c'ero già giunto, il problema e che come risultato > ottengo: > > Couldn't find Invoice with ID=36303630 ma quest'id è giusto? che tipo di campo è? non credo sia un serial, o hai già generato trentasei milioni di fatture? È la chiave primaria del record? pietro
on 2009-06-09 09:48
Pietro Giorgianni wrote: > Il giorno 9 giugno 2009 9.38, jamba jamba<faletra@gmail.com> ha scritto: >> a questa soluzione c'ero gi� giunto, il problema e che come risultato >> ottengo: >> >> Couldn't find Invoice with ID=36303630 > > ma quest'id � giusto? che tipo di campo �? non credo sia un serial, o > hai gi� generato trentasei milioni di fatture? � la chiave primaria > del record? > > pietro no solo 4/5 per prova. la fattura la stampo tramite un link nella view in questo modo: <%= link_to "PDF", :controller => "invoices", :action => "pdf", :id => id %>
on 2009-06-09 10:01
Il giorno 9 giugno 2009 9.48, jamba jamba<faletra@gmail.com> ha scritto: > la fattura la stampo tramite un link nella view in questo modo: > > <%= link_to "PDF", :controller => "invoices", :action => "pdf", :id => > id %> Bene; che cos'è id? Molto probabilmente non è quello che vorresti; sarà l'id di chissà che, dell'oggetto view, dell'oggetto response, vai a sapere. Nel momento in cui mostri quel link, probabilmente hai un oggetto che rappresenta la fattura in questione; chiamiamolo oggetto_che_rappresenta_la_fattura_in_questione. Ecco, quello che vuoi scrivere è <%= link_to "PDF", :controller => "invoices", :action => "pdf", :id => oggetto_che_rappresenta_la_fattura_in_questione.id %> pietro
on 2009-06-09 10:40
Pietro Giorgianni wrote: > <%= link_to "PDF", :controller => "invoices", :action => "pdf", :id => > oggetto_che_rappresenta_la_fattura_in_questione.id %> > > > > pietro quasi ci siamo. ma oggetto_che_rappresenta:fattura_in_questione potrebbe essere invoice (che sarebbe anche la tabella nel db) e quindi fare invoice.id?
on 2009-06-09 12:22
Il giorno 9 giugno 2009 10.40, jamba jamba<faletra@gmail.com> ha scritto: > quasi ci siamo. ma oggetto_che_rappresenta:fattura_in_questione potrebbe > essere invoice (che sarebbe anche la tabella nel db) e quindi fare > invoice.id? Non ci siamo. Nella view non hai a disposizione altro che quello che viene definito nel metodo del controller. In genere, se l'action mostra un elenco di dati si definisce una variabile (la convenzione è @invoices) che è una lista, mentre se si mostra un singolo oggetto (fattura) la convenzione è @invoice. Questa è una convenzione molto sensata, ma non è detto che tu la stia seguendo. Che action è?Ci mostri il codice di quest'action? pietro
on 2009-06-09 13:41
> Che action > �?Ci mostri il codice di quest'action? l'action è questa: def pdf numero = Invoice.find(params[:id]) _pdf = PDF::Writer.new _pdf.select_font "Times-Roman" _pdf.text "prova", :font_size => 20, :justification => :left _pdf.line(50, 690, 560, 690).stroke send_data _pdf.render, :filename => "#{invoice.number}.pdf", :type => "application/pdf" end
on 2009-06-09 13:47
Il giorno 9 giugno 2009 13.41, jamba jamba<faletra@gmail.com> ha scritto: > >> Che action >> �?Ci mostri il codice di quest'action? > > l'action è questa: no, parlavo dell'action che poi viene seguita da una view che ti fa comparire un link sulla pagina, quel link che poi clicchi per arrivare all'action PDF. pietro.
on 2009-06-09 15:01
Pietro Giorgianni wrote: > Il giorno 9 giugno 2009 13.41, jamba jamba<faletra@gmail.com> ha > scritto: >> >>> Che action >>> �?Ci mostri il codice di quest'action? >> >> l'action è questa: > > no, parlavo dell'action che poi viene seguita da una view che ti fa > comparire un link sulla pagina, quel link che poi clicchi per arrivare > all'action PDF. > > pietro. non ho capito molto ti posto tutta la view poi mi dici di cosa hai bisogno... <% form_for @invoice do |f| %> <fieldset> <legend>Modifica Fattura</legend> <h3>Fattura nº <%= @invoice.invoice_number %></h3> <% unless @invoice.new_record? %> <div class="<%= cycle('even', 'odd') %> pdf right"> questo è il link alla action pdf... <%= link_to "PDF", :controller => "invoices", :action => "pdf", :id => @invoice.id %> </div> <% end %> <div class="<%= cycle('even', 'odd') %>"> <label for="invoice_date">Data:</label> <%= f.date_select :date, :order => [:day, :month, :year] %> </div> <div class="<%= cycle('even', 'odd') %>"> <label>Cliente:</label> <%= f.select :customer_id, @customers.map {|customer| [customer.name, customer.id]}, {}, :class => "customer" %> <%= observe_field :invoice_customer_id, :url => select_customers_path, :update => "customer_info", :with => "id" %> </div> <div class="<%= cycle('even', 'odd') %>"> <label for="invoice_iva">IVA:</label> <%= f.text_field :iva, :class => "textfield percent" %> % <%= error_for :invoice, :iva %> </div> <div class="<%= cycle('even', 'odd') %>"> <label for="invoice_rit">Ritenuta D'acconto:</label> <%= f.text_field :rit, :class => "textfield percent" %> % <%= error_for :invoice, :rit %> </div> <div class="<%= cycle('even', 'odd') %>"> <label for="invoice_quattro">Ritenuta professionale:</label> <%= f.text_field :quattro, :class => "textfield percent" %> % <%= error_for :invoice, :quattro %> </div> <div> <%= f.submit "Continua", :action => "update",:class => "button" %> </div> </fieldset> <% end %> <% unless @invoice.new_record? %> <div id="invoice_lines_form"> <%= render :partial => "/invoice_lines/invoice_lines" %> </div> <div class="<%= cycle('even', 'odd')%> delete_invoice"> <%= link_to "Elimina fattura", invoice_path(@invoice), :method => :delete, :confirm => "Sei sicuro?" %> </div> <% end %>
on 2009-06-10 02:32
jamba jamba wrote: > >> Che action >> �?Ci mostri il codice di quest'action? > > l'action è questa: > > def pdf > numero = Invoice.find(params[:id]) > _pdf = PDF::Writer.new > _pdf.select_font "Times-Roman" > _pdf.text "prova", :font_size => 20, :justification => :left > _pdf.line(50, 690, 560, 690).stroke > > > send_data _pdf.render, :filename => "#{invoice.number}.pdf", :type > => "application/pdf" > end non ho guardato dopo, cmq, se assegni a numero la tua Invoice, poi devi usare quella di variabile.... send_data _pdf.render, :filename => "#{numero.number}.pdf", :type => "application/pdf"
on 2009-06-10 09:03
non ci siamo ancora. cerco di spiegare meglio la struttura della mia app. la tabella invoice, ha alcuni campi tra i quali number (che rappresenta il numebro della fattura). chiaramente active record ha creato anche il campo ID. nella action pdf creo la variabile e le assegno il risultato di find fatto sul campo ID. nella view inserisco un link_to legato all'action pdf per generare il pdf. il problema è che non riesco a fare in modo che il nome dle file sia il numero della fattura (non l'ID).... Alessandro Scolavino wrote: > jamba jamba wrote: >> >>> Che action >>> �?Ci mostri il codice di quest'action? >> >> l'action è questa: >> >> def pdf >> numero = Invoice.find(params[:id]) >> _pdf = PDF::Writer.new >> _pdf.select_font "Times-Roman" >> _pdf.text "prova", :font_size => 20, :justification => :left >> _pdf.line(50, 690, 560, 690).stroke >> >> >> send_data _pdf.render, :filename => "#{invoice.number}.pdf", :type >> => "application/pdf" >> end > > non ho guardato dopo, cmq, se assegni a numero la tua Invoice, poi devi > usare quella di variabile.... > > send_data _pdf.render, :filename => "#{numero.number}.pdf", :type => > "application/pdf"
on 2009-06-10 09:58
scusami, ma sto notando qualcosa di strano, nella action, usi questo:
numero = Invoice.find(params[:id])
quindi, "numero" è un'istanza di Invoice, una fattura registrata con un
determinato id
poco dopo, hai usato questo:
[SNIP] :filename => "#{invoice.number}.pdf", [SNIP]
quindi se vuoi usare il numer odella fattura, dovresti usare questo:
:filename => "#{numero.number}.pdf",
spero che questa volta vada! =)
A.
jamba jamba ha scritto:
on 2009-06-10 10:09
Andrea Pavoni wrote: > scusami, ma sto notando qualcosa di strano, nella action, usi questo: > > numero = Invoice.find(params[:id]) > > quindi, "numero" è un'istanza di Invoice, una fattura registrata con un > determinato id > > poco dopo, hai usato questo: > > [SNIP] :filename => "#{invoice.number}.pdf", [SNIP] > > quindi se vuoi usare il numer odella fattura, dovresti usare questo: > > :filename => "#{numero.number}.pdf", > > > spero che questa volta vada! =) > A. > > > jamba jamba ha scritto: Grazie, quell'errore lo avevo già corretto nel frattempo. ora però cosa metto nella view? <%= link_to "PDF", :controller => "invoices", :action => "pdf", :id => ???? %> se metto @number o @number.invoice_number o altro ottengo come risultato: You have a nil object when you didn't expect it! The error occurred while evaluating nil.invoice_number quindi @number lo considerata nill... mi sto perdendo...
on 2009-06-10 10:42
se all'inzio dell'action hai istanziato
@fattura = Invoice.find(params[:id])
allora nella view dovresti mettere:
:filename => "#{fattura.number}.pdf"
in pratica, quello che dichiari nella action, lo ritrovi nella view =P
ciao,
A.
jamba jamba ha scritto:
on 2009-06-10 11:10
Andrea Pavoni wrote: > se all'inzio dell'action hai istanziato > > @fattura = Invoice.find(params[:id]) > > allora nella view dovresti mettere: > > :filename => "#{fattura.number}.pdf" > > > in pratica, quello che dichiari nella action, lo ritrovi nella view =P > > ciao, > A. > > jamba jamba ha scritto: :filename => "#{fattura.number}.pdf" lo devo mettere nel action. serve a pdf-write per generare il pdf. nella view meto un semplice link_to solo che non sono completare :id=>???
on 2009-06-10 11:26
ok, nella view se metti: :id => @fattura dovrebbe comunque riferirsi all'id della fattura che vuoi usare. presumo che più o meno, tu faccia questo (esempio semplificato, per capire): - hai una lista di fatture, è una view "index.html.erb" generata da un controller con un'action "index" - ogni fattura ha una action "show" per essere mostrata (qui hai instanziato una "@fattura") - quando visualizzi una fattura, hai un link che punta all'azione per generare il pdf in questo caso, nella view avresti: link_to 'Stampa PDF', :action => 'pdf', :id => @fattura in questo modo dovrebbe funzionare =P ciao, A. jamba jamba ha scritto:
on 2009-06-10 11:33
> in questo modo dovrebbe funzionare =P
Couldn't find Invoice with ID=pdf
sto gettando la spugna... :-(
on 2009-06-10 12:02
deve trattarsi di un errore talmente scemo che appena lo scoprirai darai testate al muro per penitenza =P a questo punto prova a specificare anche il controller, e metti l'id in modo esplicito link_to 'Stampa PDF', :controller => 'tuo_controller', :action => 'pdf', :id => @fattura.id controlla anche il 'config/routes.rb' perchè ho come l'impressione che l'errore si riferisca ad una errata gestione dei parametri... altra cosa, ti consiglio di sfruttare la console di rails ( ./script/console ) per fare prove con i modelli. almeno nel mio caso, è stata un ottimo aiuto per capire/testare certi meccanismi =P ciao, A. jamba jamba ha scritto:
on 2009-06-10 12:14
Andrea Pavoni wrote: > deve trattarsi di un errore talmente scemo che appena lo scoprirai darai > testate al muro per penitenza =P > > a questo punto prova a specificare anche il controller, e metti l'id in > modo esplicito > > link_to 'Stampa PDF', :controller => 'tuo_controller', :action => 'pdf', > :id => @fattura.id > > controlla anche il 'config/routes.rb' perch� ho come l'impressione che > l'errore si riferisca ad una errata gestione dei parametri... > > altra cosa, ti consiglio di sfruttare la console di rails ( > ./script/console ) per fare prove con i modelli. almeno nel mio caso, � stata un ottimo aiuto per capire/testare certi meccanismi =P > > ciao, > A. > > jamba jamba ha scritto: il controller lo specifico già . ma devo usare @fattura o @fattura.id? nel secondo caso: Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id ad ogni modo do un occhio a routes.rb
on 2009-06-10 12:24
2009/6/10 jamba jamba <faletra@gmail.com>: > il controller lo specifico già. ma devo usare @fattura o @fattura.id? > nel secondo caso: > Called id for nil, which would mistakenly be 4 -- if you really wanted > the id of nil, use object_id questo significa che nella vista in cui hai il link_to la variabile @fattura ha il valore nil e non e' un'istanza del modello Fattura. i.e. nella action del controller che poi fa il render di quella vista non hai assegnato @fattura = qualcosa... Quale e' il codice della action che genera la pagina in cui e' presente il link? ciao, Luca
on 2009-06-10 12:31
sembra che l'oggetto @fattura non esista... ok, facciamo un passo indietro: puoi incollare qui l'action che mostra la fattura? (presumo si chiami 'show') a questo punto non è importante l'action del pdf, bensì quella che dovrebbe instanziare l'oggetto @fattura che poi userai nella view. non ho idea del dove/quando chiami l'action per il pdf, ma bisogna conoscere anche chi/cosa instanzia l'oggetto da usare nel link_to. spesso, soprattutto con un framework come rails, occorre avere una *visione dall'alto* della situazione. un errore che compare in un determinato punto, potrebbe risalire molto più indietro di quanto pensi... =) A. jamba jamba ha scritto:
on 2009-06-10 14:42
l'action che utilizzo per mostrare (e modificare) la fattura è edit
def edit
@invoice = Invoice.find(params[:id], :include => :customer)
@customer = @invoice.customer
@invoice_line = InvoiceLine.new
@customers = Customer.find(:all)
respond_to do |format|
format.html { render :action => "invoice_form" }
end
end
poi sempre nello stesso controller ho l'action pdf
def pdf
numero = Invoice.find(:all, :order=>'number')
_pdf = PDF::Writer.new
_pdf.select_font "Times-Roman"
_pdf.text "Studio Faletra", :font_size => 20, :justification =>
:left
_pdf.line(50, 690, 560, 690).stroke
send_data _pdf.render, :filename => "#{numero.number}.pdf", :type =>
"application/pdf"
end
Andrea Pavoni wrote:
> sembra che l'oggetto @fattura non esista...
>
> ok, facciamo un passo indietro: puoi incollare qui l'action che mostra
> la fattura? (presumo si chiami 'show')
>
> a questo punto non è importante l'action del pdf, bensì quella che
> dovrebbe instanziare l'oggetto @fattura che poi userai nella view.
>
> non ho idea del dove/quando chiami l'action per il pdf, ma bisogna
> conoscere anche chi/cosa instanzia l'oggetto da usare nel link_to.
>
> spesso, soprattutto con un framework come rails, occorre avere una
> *visione dall'alto* della situazione. un errore che compare in un
> determinato punto, potrebbe risalire molto più indietro di quanto
> pensi... =)
>
> A.
>
> jamba jamba ha scritto:
on 2009-06-10 16:14
ok per quel codice, ma vorrei capire un paio di cose: qual'è la action relativa alla view che contiene il "link_to" per la generazione del pdf ? nel caso che questa action sia 'edit', vuol dire che link_to dovrebbe essere: link_to 'Stampa PDF', :controller => 'tuo_controller', :action => 'pdf', :id => @invoice tuttavia in 'edit' chiami la action 'invoice_form', tieni presente che se è questa a generare la view, devi instanziare comunque un oggetto da usare... ciao, A. jamba jamba ha scritto:
on 2009-06-10 16:47
ho fatto una modifica che credo renda più lineare l'utilizzo. per stampare una fattura non richiamo più l'action edit. nella view che mostra tutte le fatture in forma tabellare, all'interno della tabella ho inserito una colonna che per ogni fattura una icona linkata ad una action caratteristica edit, delete e appunto pdf. in questo modo non passo più per l'action edit. il problema però resta.... Andrea Pavoni wrote: > ok per quel codice, ma vorrei capire un paio di cose: > > qual'� la action relativa alla view che contiene il "link_to" per la > generazione del pdf ? nel caso che questa action sia 'edit', vuol dire > che link_to dovrebbe essere: > > link_to 'Stampa PDF', :controller => 'tuo_controller', :action => 'pdf', > :id => @invoice > > tuttavia in 'edit' chiami la action 'invoice_form', tieni presente che > se � questa a generare la view, devi instanziare comunque un oggetto da > usare... > > ciao, > A. > > > jamba jamba ha scritto:
on 2009-06-11 00:50
> def pdf > numero = Invoice.find(:all, :order=>'number') > _pdf = PDF::Writer.new > _pdf.select_font "Times-Roman" > _pdf.text "Studio Faletra", :font_size => 20, :justification => > :left > _pdf.line(50, 690, 560, 690).stroke > > > > send_data _pdf.render, :filename => "#{numero.number}.pdf", :type => > "application/pdf" > end Leggo distrattamente ma mi pare di vedere un errore: la variabile numero è associata ad una colletion di invoices, mentre poi chiami numero.number che dubito sia un metodo relativo ad una collection...
on 2009-06-11 08:45
> Leggo distrattamente ma mi pare di vedere un errore: la variabile numero > è associata ad una colletion di invoices, mentre poi chiami > numero.number che dubito sia un metodo relativo ad una collection... number è un campo di una tabella del DB. (invoices)
on 2009-06-11 08:53
Il giorno 11 giugno 2009 8.45, jamba jamba<faletra@gmail.com> ha
scritto:
> ...
def pdf
numero = Invoice.find(:all, :order=>'number')
...
end
ribadisco: tu vuoi rendere in pdf una sola invoice, quindi perché scrivi
:all?
@invoice = Invoice.find(params[:id])
...
send_data _pdf.render, :filename => "#{@invoice.number}.pdf", :type =>
"application/pdf"
pietro
on 2009-06-11 08:55
2009/6/11 jamba jamba <faletra@gmail.com>: > >> Leggo distrattamente ma mi pare di vedere un errore: la variabile numero >> è associata ad una colletion di invoices, mentre poi chiami >> numero.number che dubito sia un metodo relativo ad una collection... > > number è un campo di una tabella del DB. (invoices) gia' ma questo: numero = Invoice.find(:all, :order=>'number') NON trova una Invoice (i.e. un record) bensi' una lista di invoice (il parametro :all significa "tutti i record"). Dovresti fare invece: numero = Invoice.find( <id della fattura> ) dove <id della fattura> deve essere l'id che vuoi trovare, come lo ottieni nell'action dipende da come la chiami, ad esempio se la chiami con: /nomecontroller/pdf/10 troverai l'id '10' in params[:id] N.B. per fare un test del resto del codice dell'action puoi anche scrivere direttamente nel codice il valore di un ID che sai esistere: numero = Invoice.find( 1 ) ciao, Luca
on 2009-06-11 09:12
Luca Mearelli wrote: > 2009/6/11 jamba jamba <faletra@gmail.com>: >> >>> Leggo distrattamente ma mi pare di vedere un errore: la variabile numero >>> � associata ad una colletion di invoices, mentre poi chiami >>> numero.number che dubito sia un metodo relativo ad una collection... >> >> number � un campo di una tabella del DB. (invoices) > > gia' ma questo: > > numero = Invoice.find(:all, :order=>'number') > > NON trova una Invoice (i.e. un record) bensi' una lista di invoice (il > parametro :all significa "tutti i record"). > > Dovresti fare invece: > > numero = Invoice.find( <id della fattura> ) > ok grazie a san google sono giunto un attimo fa allo stesso risultato. il pdf viene creato. solo che non voglio che il nome del file sia L'ID ma il numero della fattura. l'action l'ho modificata in questo modo: def pdf @n = Invoice.find(:all) _pdf = PDF::Writer.new _pdf.select_font "Times-Roman" _pdf.text "test", :font_size => 20, :justification => :left _pdf.line(50, 690, 560, 690).stroke send_data _pdf.render, :type => "application/pdf", :disposition => 'inline', :filename => @d.to_s + ".pdf" end in questo modo appunto funziona, ma se a: :filename => @d.to_s + ".pdf" aggiungo :filename => @d.number.to_s + ".pdf" ottengo: You have a nil object when you didn't expect it! The error occurred while evaluating nil.number ci sono quasi ormai... secondo voi la definziione di tutto il file pdf che trovi nell'action sopra è più corretto che si trovi nel controller come è adesso, oppure è meglio che la metta da qualche altra parte e poi la richiami nell'action?
on 2009-06-11 09:26
jamba jamba ha scritto: > send_data _pdf.render, > :filename => @d.number.to_s + ".pdf" > > ottengo: > You have a nil object when you didn't expect it! > The error occurred while evaluating nil.number > again: se dichiari @n, chi sarebbe @d ? altri hanno già fatto notare che se devi stampare una sola fattura, non ha senso che le cerchi tutte =P la forma @d.number.to_s + ".pdf" è meno efficente, ricordi che qualcuno lo ha corretto proprio in questo thread? =) > ci sono quasi ormai... > secondo voi la definziione di tutto il file pdf che trovi nell'action > sopra è più corretto che si trovi nel controller come è adesso, oppure è > meglio che la metta da qualche altra parte e poi la richiami > nell'action? > in teoria dipende: se già sai (o prevedi) che la conversione in pdf non sarà specifica solo per le fatture, ma si estenderà anche ad altri documenti, allora credo sia più logico spostare il codice altrove =P in pratica, se estrapoli quel codice e lo tieni separato, magari potresti riutilizzarlo per altri progetti, o condividerlo, etc... ciao, A.
on 2009-06-11 09:26
Non vorrei sembrare pedante, ma... 2009/6/11 jamba jamba <faletra@gmail.com>: > > ok grazie a san google sono giunto un attimo fa allo stesso risultato. hmm non credo perche' nel codice qui sotto continui ad usare il find(:all), inoltre (partendo dall'assunzione che quello postato sia il codice completo dell'action): > def pdf > @n = Invoice.find(:all) qui assegni la variabile di istanza @n con la lista di invoice > send_data _pdf.render, > :type => "application/pdf", > :disposition => 'inline', > :filename => @d.to_s + ".pdf" qui usi la variabile di istanza @d che NON hai assegnato da nessuna parte i.e. e' nil, vuota > :filename => @d.number.to_s + ".pdf" > > ottengo: > You have a nil object when you didn't expect it! > The error occurred while evaluating nil.number CVD vedi sopra ;) Luca
Please log in before posting. Registration is free and takes only a minute.
Existing account
(Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
Log in with Google account | Log in with Yahoo account
No account? Register here.