Forum: Italian Ruby user group Allegare un file agli stakeholders del sistema

Posted by An Car (punkaruby)
on 2010-08-04 11:42
Ciao a tutti,
sto preparando un applicativo con rails per gestire le attività di un
ente di formazione.

###########################
       PREMESSE
###########################

Ho necessità di poter allegare documenti ai vari stakeholders.
Esempio:
- vorrei poter allegare il cv del singolo allievo alla scheda del
singolo allievo,
- oppure la piantina dell'aula alla scheda descrittiva dell'aula

e via dicendo...

1 - Ho preparato il controller mettendoci il metodo upload:

def upload
  t = Time.now
  nome =  t.to_i.to_s

  uploaded_io = params[:file]
  File.open(Rails.root.join('public', 'uploads', uploaded_io.nome), 'w')
do |file|
  file.write(uploaded_io.read)
  end
end


2- in ciascuna scheda dei vari stakeholders volevo mettere questo form:

<% form_tag({ :controller => :attachment, :action => :upload},
:multipart => true) do %>
<%= file_field_tag 'file', :id => "search-text" %>  didascalia: <%=
text_field_tag :didascalia,nil, :id => "search-text" %>
<%= hidden_field_tag(:idext, @resource.id) %>
<%= hidden_field_tag(:categoria, Resource::CATEGORIA) %>
<%= submit_tag("ALLEGA", :id => "search-submit-attach") %>
<% end %>

3- tabella su db

+---------------+--------------+------+-----+---------+----------------+
| Field         | Type         | Null | Key | Default | Extra          |
+---------------+--------------+------+-----+---------+----------------+
| id            | int(11)      | NO   | PRI | NULL    | auto_increment |
| didascalia    | varchar(255) | YES  |     | NULL    |                |
| nomeoriginale | varchar(255) | YES  |     | NULL    |                |
| nome          | varchar(255) | YES  |     | NULL    |                |
| created_at    | datetime     | YES  |     | NULL    |                |
| updated_at    | datetime     | YES  |     | NULL    |                |
| idext         | int(11)      | YES  |     | NULL    |                |
| categoria     | int(11)      | YES  |     | NULL    |                |
+---------------+--------------+------+-----+---------+----------------+

MA QUANDO PROVO IL TUTTO:

Routing Error
No route matches "/attachment/upload" with {:method=>:post}

###########################
       DOMANDE
###########################
1- E' giusta la mia configurazione di routes:
map.resources :attachments, :collection => { :upload => :any }??

2- con quel form però carico solo il file nel filesystem...ma a me serve
anche caricarne i riferimenti del db. Come faccio ?
Devo cambiare il form e fare un <% form_for(@attachment) do |f| %>  ?


######################################################
       RINGRAZIAMENTI DOVUTI
######################################################

A chi ha avuto la pazienza e la cortesia di seguirmi fino ad adesso: il
mio ringraziamento...

Come a chi avrà pietà di me e mi spiegherà dove sbaglio...

                           :-D
Posted by Andrea Pavoni (apeacox)
on 2010-08-04 12:23
(Received via mailing list)
non vorrei smontarti il lavoro, ma potresti usare paperclip per gestire
tranquillamente gli uploads, magari puoi dare una sbirciata al suo 
codice :P

altro suggerimento:

se devi allegare N files associati allo stesso stakeholder, potresti
usare le nested forms, con un po' di javascript (purtroppo *obtrusive*,
non ho ancora trovato altri modi) puoi replicare la form tutte le volte
che vuoi

venendo alle tue domande:
1- la rotta 'map.resources :attachments, :collection => { :upload =>
:any }' a occhio non mi sembra appropriata, hai provato a vedere cosa
esce fuori con 'rake routes' ?

2- se vuoi che la form sia collegata al modello, dovresti usare la
sinstassi '<% form_for(@attachment) do |f| %>'

ciao,
A.


Il 04/08/2010 11:42, An Car ha scritto:
Posted by An Car (punkaruby)
on 2010-08-04 12:27
Ciao Andrea,
mi sa che seguirò i tuoi consigli...
non vedo perchè inventare di nuovo la ruota quando qualcun'altro l'ha 
già costruita....

Paperclip mi sembra abbastanza semplice da impiegare...

Grazie !


Andrea Pavoni wrote:
> non vorrei smontarti il lavoro, ma potresti usare paperclip per gestire
> tranquillamente gli uploads, magari puoi dare una sbirciata al suo 
> codice :P
> 
> altro suggerimento:
> 
> se devi allegare N files associati allo stesso stakeholder, potresti
> usare le nested forms, con un po' di javascript (purtroppo *obtrusive*,
> non ho ancora trovato altri modi) puoi replicare la form tutte le volte
> che vuoi
> 
> venendo alle tue domande:
> 1- la rotta 'map.resources :attachments, :collection => { :upload =>
> :any }' a occhio non mi sembra appropriata, hai provato a vedere cosa
> esce fuori con 'rake routes' ?
> 
> 2- se vuoi che la form sia collegata al modello, dovresti usare la
> sinstassi '<% form_for(@attachment) do |f| %>'
> 
> ciao,
> A.
> 
> 
> Il 04/08/2010 11:42, An Car ha scritto:
Posted by Michele Franzin (Guest)
on 2010-08-04 12:33
(Received via mailing list)
2010/8/4 Andrea Pavoni <apeacox@gmail.com>:
> non vorrei smontarti il lavoro, ma potresti usare paperclip per gestire
> tranquillamente gli uploads, magari puoi dare una sbirciata al suo codice :P
>
> altro suggerimento:
>
> se devi allegare N files associati allo stesso stakeholder, potresti
> usare le nested forms, con un po' di javascript (purtroppo *obtrusive*,
> non ho ancora trovato altri modi) puoi replicare la form tutte le volte
> che vuoi

di un'occhiata a http://github.com/ryanb/nested_form
credo ti aiuterà molto

michele.
Posted by Andrea Pavoni (apeacox)
on 2010-08-04 12:43
(Received via mailing list)
grazie Michele, non lo conoscevo quel plugin ;)

a dire il vero a forza di usare nested forms in quel modo, ho sviluppato
anche io un po' di codice per semplificarmi la vita ma non ancora un
plugin :P

appena ho tempo lo provo, almeno per capire come genera il JS per il
link 'aggiungi form'. nel mio approccio, il codice non è unobtrusive,
potrebbe esserlo se usassi ajax, ma non trovo una reale giustificazione,
visto che posso ottenere lo stesso risultato senza chiamate asincrone :P

Il 04/08/2010 12:32, Michele Franzin ha scritto:
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
No account? Register here.