# Di nuovo

**URL:** <https://www.ruby-forum.com/t/di-nuovo/101383>\
**Category:** IT\
**Created:** [August 4, 2006, 4:59pm UTC](https://www.ruby-forum.com/t/di-nuovo/101383 "2006-08-04T16:59:51Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![gnugnaman](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/a9a28c/32.png) [@gnugnaman](https://www.ruby-forum.com/u/gnugnaman)\
**Post date:** [August 4, 2006, 4:59pm UTC](https://www.ruby-forum.com/t/di-nuovo/101383/1 "2006-08-04T16:59:51Z")

</div>

per favore sto impazzendo…qualcuno mi puÃ² aiutare (?) Il vecchio post  
era questo :

ciao a tutti,

volevo sapere s potevate consigliarmi un modo per fare un input type  
condizionato da una select (Ã¨ un campo di ricerca). Mi speigo meglio:  
vorrei fare solo un campo di ricerca e usarlo per tutte le colonne della  
mia tabella. Ho giÃ creato la select cosÃ¬:

(nel rhtml)  
\<%= @colonne = Searchfield.find(:all, :order =\> “name”)  
collection\_select(:searchfield, :id, @colonne, :id, :name)%\>

e nel controller ho messo diversi if a seconda che @colonne contenga  
l’ide selezionato. Ma non funziona niente.

Ci sono modi migliori?

grazie di cuore

---

<div class="post-metadata">

**Author:** ![gnugnaman](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/a9a28c/32.png) [@gnugnaman](https://www.ruby-forum.com/u/gnugnaman)\
**Post date:** [August 4, 2006, 6:48pm UTC](https://www.ruby-forum.com/t/di-nuovo/101383/2 "2006-08-04T18:48:43Z")

</div>

On 8/4/06, Giovanno Z. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> volevo sapere s potevate consigliarmi un modo per fare un input type  
> condizionato da una select (è un campo di ricerca). Mi speigo meglio:  
> vorrei fare solo un campo di ricerca e usarlo per tutte le colonne della  
> mia tabella. Ho già creato la select così:

se il modello da cercare e’ Contact, potresti fare qualcosa del tipo:

\<%= collection\_select(:searchfield, :name,  
Contact.content\_columns.collect{|c| c.name}, :to\_s, :humanize) %\>  
\<%= text\_field(:searchfield, :value) %\>

che crea un select usando le colonne del modello (mette ill nome della  
colonna nel valore e la versione “leggibile” nel nome della option).

Alla submit nel controller troverai il nome della colonna in  
params[:searchfield][:name] poi:

Contact.find(:all, :conditions=\>[“? = ?”, params[:searchfield][:name],  
params[:searchfield][:value]])

N.B. devi avere un oggetto Searchfield con campi name e value!

ciao,  
Luca

P.S. l’ho scritto al volo, senza testarlo…

---

<div class="post-metadata">

**Author:** ![gnugnaman](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/a9a28c/32.png) [@gnugnaman](https://www.ruby-forum.com/u/gnugnaman)\
**Post date:** [August 8, 2006, 12:48pm UTC](https://www.ruby-forum.com/t/di-nuovo/101383/3 "2006-08-08T12:48:25Z")

</div>

Luca M. wrote:

> \<%= collection\_select(:searchfield, :name,  
> Contact.content\_columns.collect{|c| c.name}, :to\_s, :humanize) %\>  
> \<%= text\_field(:searchfield, :value) %\>
> 
> che crea un select usando le colonne del modello (mette ill nome della  
> colonna nel valore e la versione “leggibile” nel nome della option).
> 
> Alla submit nel controller troverai il nome della colonna in  
> params[:searchfield][:name] poi:
> 
> Contact.find(:all, :conditions=\>["? = ?", params[:searchfield][:name],  
> params[:searchfield][:value]])

grazie Luca,

in effetti cosÃ¬ Ã¨ molto meglio…  
al posto del Contact.find io perÃ² ho usato questo:

def my\_search4  
surname = params[:contact][:surname]  
tiporicerca = params[:searchfield][:name]  
valorericerca = params[:searchfield][:value]  
if valorericerca == “”  
@contacts = Contact.find\_by\_sql [“SELECT \* FROM contacts WHERE  
(surname = ?)”, surname]  
else  
@contacts = Contact.find\_by\_sql [“SELECT \* FROM contacts WHERE  
(surname = ? AND ? = ?)”, surname, tiporicerca,  
valorericerca]  
end

```
end

```

perchÃ¨ volevo per la ricerca un campo fisso e uno ‘selezionabile’. Il  
codice non da problemi ma guarda il log:

Processing ContactController#my\_search4 (for 127.0.0.1 at 2006-08-08  
12:37:03) [POST]  
Session ID: 6a9c308d4683734a3bf779ad0022bcfd  
Parameters: {“searchfield”=\>{“name”=\>“name”, “value”=\>“franco”},  
“contact”=\>{“surname”=\>“zangrilli”}, “action”=\>“my\_search4”,  
“controller”=\>“contact”}  
e[4;36;1mContact Load (0.000000)e[0m e[0;1mSELECT \* FROM contacts  
WHERE (surname = ‘zangrilli’ AND ‘name’ = ‘franco’)e[0m Completed in  
0.06000 (16 reqs/sec)

\*\*\*\*\*PERCHE’ ‘name’ (‘name’ = ‘franco’) E’ TRA VIRGOLETTE? E’ UN ERRORE?

> N.B. devi avere un oggetto Searchfield con campi name e value!

ho creato una tabella searchfields nel mio db ma l’ho lasciata vuota (?)

\*\*\*\*\*\*se cerco solo per cognome (senza usare la select) la ricerca  
funziona. ma se cerco inserendo anche del testo nella textarea della  
select allora non ho errore ma non mi viene alcun risultato!

> ciao,  
> Luca
> 
> P.S. l’ho scritto al volo, senza testarlo…

grazie mille

---

<div class="post-metadata">

**Author:** ![gnugnaman](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/a9a28c/32.png) [@gnugnaman](https://www.ruby-forum.com/u/gnugnaman)\
**Post date:** [August 15, 2006, 2:09pm UTC](https://www.ruby-forum.com/t/di-nuovo/101383/4 "2006-08-15T14:09:39Z")

</div>

ciao,

On 8/8/06, Giovanno Z. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> ```
> @contacts = Contact.find_by_sql ["SELECT * FROM contacts WHERE
> 
> ```
> 
> (surname = ? AND ? = ?)", surname, tiporicerca,  
> valorericerca]  
> end  
> … l’altra volta avevo scritto il tutto al volo, non cosiderando che  
> Rails fa (giustamente) l’escape dei parametri che si passano come  
> condizioni, dunque se e’ una stringa la circonda con gli apici. Cosi  
> non e’ sql corretto (gli apici delimitano i valori non gli  
> identificatori tipo un nome di colonna)…

Pero’ puoi fare:  
@contacts = Contact.find\_by\_sql [“SELECT \* FROM contacts WHERE  
(surname = ? AND #{tiporicerca} = ?)”, surname, valorericerca]

oppure potresti fare

@contacts = Contact.find\_by\_surname(surname,  
:conditions=\>[“#{tiporicerca} = ?)”, valorericerca])

se hai esigenze piu complesse potresti usare il plugin ez\_where  
([http://brainspl.at/articles/2006/01/30/i-have-been-busy](http://brainspl.at/articles/2006/01/30/i-have-been-busy))

> ho creato una tabella searchfields nel mio db ma l’ho lasciata vuota (?)

Non c’e’ bisogno che l’oggetto in si un ActiveRecord, se non vuoi  
usare le validazioni puoi semplicemente creare la classe Searchfield  
nella directory model senza farle ereditare da ActiveRecord::Base.  
Dovrai creare i metodi che ti servono, ma dovrebbe bastare:

class Searchfield  
attr\_accessor :name, :value  
end

ciao,  
Luca
