Valore "not" da assegnare ad un simbolo

Salve a tutti,
sono un nuovo utente ed ho scoperto da poco tempo Ruby.
Ho una questione da porre alla vostra attenzione:
vorrei fare la seguente operazione, ossia reperire con l’istruzione
find() tutti quei valori che hanno lo status != 3. Non essendo
pienamente padrone della sintassi di Ruby ho scritto l’istruzione di
seguito riportata, ma durante l’esecuzione del programma mi sono reso
conto che non funziona.
Mi sapete suggerire la giusta sintassi?

se lo status == 3 la keeper è chiusa e non mi occorre

@keep = Keeper.find(:all, :conditions => { :status => !3 })

Grazie mille :slight_smile:

Se si tratta di ActiveRecord puoi fare:

@keep = Keeper.find(:all, :conditions => [‘status <> ?’, 3])

Non mi risulta si possa usare la sintassi con il simbolo nel caso di una
negazione del valore assegnato, a meno di non usare librerie tipo
MetaWhere.

Dando per assunto che il tuo esempio si riferisca all’uso di
ActiveRecord
(altri ORM si comportano in modo differente),
l’uso di conditions come Hash vale solo per corrispondenze positive.

Devi usare la sintassi pi SQL-like.

@keep = Keeper.find(:all, :conditions => ["status <> ?", 3])

Nota che la sintassi find(:all) deprecata nelle versioni recenti di AR.
Se usi AR >= 3 suggerisco di usare

@keep = Keeper.where("status <> ?", 3).all

Con AR 2.3.x

@keep = Keeper.all(:conditions => ["status <> ?", 3])

– Simone

2011/4/6 marco bala [email protected]

se lo status == 3 la keeper chiusa e non mi occorre


Simone C.
Application Developer

Site & Blog: http://www.simonecarletti.com
Email: [email protected]
LinkedIn: http://linkedin.com/in/weppos
Skype: weppos

Grazie mille per la rapidità e la completezza delle risposte.

Ho adottato questa soluzione:
@keep = Keeper.find(:all, :conditions => [“status <> ?”, 3])

perfettamente funzionante :slight_smile:
Grazie di nuovo

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs