# Passaggio di ID al modello

**URL:** <https://www.ruby-forum.com/t/passaggio-di-id-al-modello/228335>\
**Category:** IT\
**Created:** [April 18, 2013, 12:12pm UTC](https://www.ruby-forum.com/t/passaggio-di-id-al-modello/228335 "2013-04-18T12:12:46Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![softwarewin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/5f9b8f/32.png) [@softwarewin](https://www.ruby-forum.com/u/softwarewin)\
**Post date:** [April 18, 2013, 12:12pm UTC](https://www.ruby-forum.com/t/passaggio-di-id-al-modello/228335/1 "2013-04-18T12:12:46Z")

</div>

Salve,  
ho bisogno di rinominare il file di cui faccio l’upload aggiungendo l’ID  
del relativo campo nel DB.

Nel controller ho:

def update  
@request=Request.find(params[:id])  
post=Request.save(params[“request”])  
…

nel modello per il salvataggio del file in una cartella specifica ho:

def self.save(request)  
name=request[‘request’].original\_filename.gsub(/[^\w.\_-]/, ‘’ )  
directory = “#{RAILS\_ROOT}/public/files/requests”  
path=File.join(directory, name)  
File.open(path, “wb”) { |f| f.write(request[‘request’].read) }  
end

e per il caricamento di alcune info relative al file nel DB:

def request=(request\_field)  
self.allegato1 =  
“#{self.id}_#{request\_field.original\_filename.gsub(/[^\w._-]/, ‘’ )}”  
self.content\_type1 = request\_field.content\_type.chomp  
end

Il mio problema è che nel name del file vorrei aggiungere l’id, facendo  
qualcosa del genere:  
name=request[‘request’].original\_filename.gsub(/[^\w.\_-]/, ‘’ )  
name=“id”+name

Grazie mille per’aiuto!

---

<div class="post-metadata">

**Author:** ![softwarewin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/5f9b8f/32.png) [@softwarewin](https://www.ruby-forum.com/u/softwarewin)\
**Post date:** [April 18, 2013, 12:46pm UTC](https://www.ruby-forum.com/t/passaggio-di-id-al-modello/228335/2 "2013-04-18T12:46:58Z")

</div>

Risolto  
la richiesta nel controller diventa:  
…  
post=Request.save(params[“request”],@request.id)  
…

nel modello:  
def self.save(request,id)  
name=request[‘request’].original\_filename.gsub(/[^\w._-]/, ‘’ )  
name="#{id}_"+name  
…

mi resta il problema nel caso di nuovo inserimento, quando non esiste  
ancora l’ID (e non di modifica come nel caso precedente).

def create  
@request=Request.new(params[:request])  
post=Request.save(params[“request”],@request.id)  
…

Chi mi aiuta?

---

<div class="post-metadata">

**Author:** ![softwarewin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/5f9b8f/32.png) [@softwarewin](https://www.ruby-forum.com/u/softwarewin)\
**Post date:** [April 18, 2013, 12:55pm UTC](https://www.ruby-forum.com/t/passaggio-di-id-al-modello/228335/3 "2013-04-18T12:55:47Z")

</div>

Oddio,

penso che sia il codice Ruby pi PHP-like che io abbia visto da un pezzo  
🙂

Comunque, questa stringa qui  
“#{self.id}_#{request\_field.original\_filename.gsub(/[^\w._-]/,  
‘’ )}” dovrebbe fare quel che vuoi, dovresti solo metterci dentro quello  
che ti serve al posto di request\_field.

Ciao,

```
Ju

```

## –\* \*M.Sc. Ju Liu Card: [http://zerp.ly/ju-liu](http://zerp.ly/ju-liu)

Societ Cooperativa weLaika  
Corso Vigevano 14/B, 10154 Torino (TO), Italy  
[http://welaika.com](http://welaika.com) - [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

2013/4/18 Luigi M. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![softwarewin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/5f9b8f/32.png) [@softwarewin](https://www.ruby-forum.com/u/softwarewin)\
**Post date:** [April 18, 2013, 2:00pm UTC](https://www.ruby-forum.com/t/passaggio-di-id-al-modello/228335/4 "2013-04-18T14:00:11Z")

</div>

…è tanto vecchio???  
purtroppo sto ancora usando una vecchia versione di ROR perché ho  
scritto l’applicazione con instant rails tempo e fa e poi non mi sono  
più aggiornato…prima o poi lo farò.

Comunque quella stringa funziona se si deve fare una modifica ad campo  
già esistente nel DB di cui quindi esiste l’ID ma se si vuole creare un  
nuovo campo il self.id è vuoto!

Nel caso dell’update del campo dal controller richiamo la subroutine del  
models passando l’ID:

def update  
@request=Request.find(params[:id])  
post=Request.save(params[“request”],@request.id)  
…

invece nel caso di creazione di un nuovo campo:  
def create  
@request=Request.new(params[:request])  
post=Request.save(params[“request”],@request.id)  
…

@request.id non esiste ancora e quindi non viene passato alla sub del  
modello.

Come si fa?

Grazie mille

---

<div class="post-metadata">

**Author:** ![softwarewin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/5f9b8f/32.png) [@softwarewin](https://www.ruby-forum.com/u/softwarewin)\
**Post date:** [April 18, 2013, 2:20pm UTC](https://www.ruby-forum.com/t/passaggio-di-id-al-modello/228335/5 "2013-04-18T14:20:30Z")

</div>

a quel punto potresti usare una callback:

class TuoModello \< ActiveRecord::Base  
after\_save :do\_stuff\_with\_id

private  
def do\_stuff\_with\_id(some\_args\_if\_any)  
# self.id is not null  
end  
end

[http://guides.rubyonrails.org/active\_record\_validations\_callbacks.html#callbacks-overview](http://guides.rubyonrails.org/active_record_validations_callbacks.html#callbacks-overview)

ciao,  
A.

Il giorno 18/apr/2013, alle ore 14:00, Luigi M.  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) ha scritto:

> models passando l’ID:  
> …
> 
> * * *
> 
> Ml mailing list  
> [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
> [http://lists.ruby-it.org/mailman/listinfo/ml](http://lists.ruby-it.org/mailman/listinfo/ml)

–  
[http://andreapavoni.com](http://andreapavoni.com)
