Allegare un file agli stakeholders del sistema

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

non vorrei smontarti il lavoro, ma potresti usare paperclip per gestire
tranquillamente gli uploads, magari puoi dare una sbirciata al suo
codice :stuck_out_tongue:

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:

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 P. wrote:

non vorrei smontarti il lavoro, ma potresti usare paperclip per gestire
tranquillamente gli uploads, magari puoi dare una sbirciata al suo
codice :stuck_out_tongue:

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:

2010/8/4 Andrea P. [email protected]:

non vorrei smontarti il lavoro, ma potresti usare paperclip per gestire
tranquillamente gli uploads, magari puoi dare una sbirciata al suo codice :stuck_out_tongue:

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 GitHub - ryanb/nested_form: Rails plugin to conveniently handle multiple models in a single form.
credo ti aiuterà molto

michele.

grazie Michele, non lo conoscevo quel plugin :wink:

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 :stuck_out_tongue:

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 :stuck_out_tongue:

Il 04/08/2010 12:32, Michele F. ha scritto: