# Valore "not" da assegnare ad un simbolo

**URL:** <https://www.ruby-forum.com/t/valore-not-da-assegnare-ad-un-simbolo/205418>\
**Category:** IT\
**Created:** [April 6, 2011, 10:05am UTC](https://www.ruby-forum.com/t/valore-not-da-assegnare-ad-un-simbolo/205418 "2011-04-06T10:05:26Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![dubstep](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/cdc98d/32.png) [@dubstep](https://www.ruby-forum.com/u/dubstep)\
**Post date:** [April 6, 2011, 10:05am UTC](https://www.ruby-forum.com/t/valore-not-da-assegnare-ad-un-simbolo/205418/1 "2011-04-06T10:05:26Z")

</div>

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 🙂

---

<div class="post-metadata">

**Author:** ![mballante](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/b77776/32.png) [@mballante](https://www.ruby-forum.com/u/mballante)\
**Post date:** [April 6, 2011, 10:18am UTC](https://www.ruby-forum.com/t/valore-not-da-assegnare-ad-un-simbolo/205418/2 "2011-04-06T10:18:20Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![mballante](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/b77776/32.png) [@mballante](https://www.ruby-forum.com/u/mballante)\
**Post date:** [April 6, 2011, 10:22am UTC](https://www.ruby-forum.com/t/valore-not-da-assegnare-ad-un-simbolo/205418/3 "2011-04-06T10:22:39Z")

</div>

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 [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

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

–  
Simone C.  
Application Developer

Site & Blog: [http://www.simonecarletti.com](http://www.simonecarletti.com)  
Email: [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
LinkedIn: [Simone Carletti - DNSimple | LinkedIn](http://linkedin.com/in/weppos)  
Skype: weppos

---

<div class="post-metadata">

**Author:** ![mballante](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/b77776/32.png) [@mballante](https://www.ruby-forum.com/u/mballante)\
**Post date:** [April 6, 2011, 11:05am UTC](https://www.ruby-forum.com/t/valore-not-da-assegnare-ad-un-simbolo/205418/4 "2011-04-06T11:05:51Z")

</div>

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

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

perfettamente funzionante 🙂  
Grazie di nuovo
