# Meta\_search o ransack

**URL:** <https://www.ruby-forum.com/t/meta-search-o-ransack/215130>\
**Category:** IT\
**Created:** [December 22, 2011, 11:13pm UTC](https://www.ruby-forum.com/t/meta-search-o-ransack/215130 "2011-12-22T23:13:08Z")\
**Posts on this page:** 3\
**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:** [December 22, 2011, 11:13pm UTC](https://www.ruby-forum.com/t/meta-search-o-ransack/215130/1 "2011-12-22T23:13:08Z")

</div>

Ransack dovrebbe essere il successore di meta\_search ma a me sembra  
che quest’ultimo funzioni meglio, mi spiego:

ho un form di questo tipo:

= form\_for @search, :url =\> intra\_path do |f|  
%p  
= f.label :company\_name\_contains, t(‘company\_name’)  
%br  
= f.text\_field :company\_name\_contains  
= f.label :vat\_number\_contains, t(‘vat\_number’)  
%br  
= f.text\_field :vat\_number\_contains

= f.collection\_select :categories\_id\_equals, @categories, :id, :name,

Ho diverse Company, se cerco valorizzando solo company\_name, per  
esempio “abc” e c’e’ solo una Company il cui nome contiene “abc”,  
meta\_search correttamente mi da un solo risultato.  
Questa Company ha 5 categories associate.  
Se faccio la stessa ricerca usando ransack, cambiando :search con :q e  
le altre cose indicate nelle doc, ottengo invece 5 risultati, tanti  
quante sono le categories associate alla Company cercata.

---

<div class="post-metadata">

**Author:** ![msan](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/3ab097/32.png) [@msan](https://www.ruby-forum.com/u/msan)\
**Post date:** [December 23, 2011, 4:48pm UTC](https://www.ruby-forum.com/t/meta-search-o-ransack/215130/2 "2011-12-23T16:48:05Z")

</div>

Ciao devi usare una distinct per evitare duplicati, soprattutto se  
ransack mette in join più tabelle.

Nel readme di github trovi un esempio cosi:

def index  
@q = Person.search(params[:q])  
@people = @q.result(:distinct =\> true)  
end

devi usare result(:distinct =\> true)

---

<div class="post-metadata">

**Author:** ![msan](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/3ab097/32.png) [@msan](https://www.ruby-forum.com/u/msan)\
**Post date:** [December 23, 2011, 6:32pm UTC](https://www.ruby-forum.com/t/meta-search-o-ransack/215130/3 "2011-12-23T18:32:57Z")

</div>

2011/12/23 francesco agati [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> devi usare result(:distinct =\> true)  
> Si ma trovo meta\_search…come dire…piu’ intelligente.  
> Nel caso specifico se cerco una Company per company\_name senza mettere  
> alcun valore nelle categories associate, meta\_search fa una ricerca  
> solo sulla tabella companies senza nessuna join cosa che invece fa  
> ransack, cioe’ anche se la ricerca non prende in considerazione le  
> categories, ransack fa ugualmente le select utilizzando le joins,  
> meta\_search no.
