Passaggio di ID al modello

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!

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?

Oddio,

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

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

Societ Cooperativa weLaika
Corso Vigevano 14/B, 10154 Torino (TO), Italy
http://welaika.com - [email protected]

2013/4/18 Luigi M. [email protected]

…è 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

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

ciao,
A.

Il giorno 18/apr/2013, alle ore 14:00, Luigi M.
[email protected] ha scritto:

models passando l’ID:


Ml mailing list
[email protected]
http://lists.ruby-it.org/mailman/listinfo/ml