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=>???
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
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?
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
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… =)
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:
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… =)
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…
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 P. 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:
tuttavia in ‘edit’ chiami la action ‘invoice_form’, tieni presente che
se � questa a generare la view, devi instanziare comunque un oggetto da
usare…
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)
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( )
dove 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:
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( )
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:
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?
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
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…