# Per non ripetere le stesse operazioni

**URL:** <https://www.ruby-forum.com/t/per-non-ripetere-le-stesse-operazioni/216819>\
**Category:** IT\
**Created:** [February 15, 2012, 12:13am UTC](https://www.ruby-forum.com/t/per-non-ripetere-le-stesse-operazioni/216819 "2012-02-15T00:13:48Z")\
**Posts on this page:** 8\
**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:** [February 15, 2012, 12:13am UTC](https://www.ruby-forum.com/t/per-non-ripetere-le-stesse-operazioni/216819/1 "2012-02-15T00:13:48Z")

</div>

In routes.rb ho:

resources :categorizations do  
get ‘invite’, :on =\> :member  
get ‘invite\_all’, :on =\> :collection  
end

Nel controller ho:

def index  
…  
@categorizations = @q.result(:distinct =\> true)  
…  
end

nella view ho:

…  
render @categorizations

e nel partial \_categorization.html.haml ho messo:

= link\_to “Invita tutti”, invite\_all\_categorizations\_path

Nel metodo invite\_all devo fare delle operazioni sulla collection  
@categorizations.  
Dovrei, quindi, ripopolare @categorizations cosi’ come ho fatto nel  
metodo index.  
Siccome @categorization ce l’ho gia’ a disposizione nel partial non  
posso passarlo al metodo invite\_all?

---

<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:** [February 15, 2012, 8:26am UTC](https://www.ruby-forum.com/t/per-non-ripetere-le-stesse-operazioni/216819/2 "2012-02-15T08:26:25Z")

</div>

2012/2/15 Mauro [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):  
[cut]

> Nel controller ho:
> 
> def index  
> …  
> @categorizations = @q.result(:distinct =\> true)  
> …  
> end  
> [cut]  
> Nel metodo invite\_all devo fare delle operazioni sulla collection  
> @categorizations.  
> Dovrei, quindi, ripopolare @categorizations cosi’ come ho fatto nel  
> metodo index.  
> [cut]

All’interno di categorizations\_controller.rb (se hai usato questa  
nomenclatura) potresti inserire un filtro:

skip\_before\_filter :set\_collection, except: [:index, :invite\_all]

def set\_collection  
@q = # get q in the way you did for the index  
@categorizations = @q.result(:distinct =\> true)  
end

in questo modo nelle viste index.html.haml e invite\_all.html.haml  
avrai a disposizione la variabile d’istanza @categorizations.

Maurizio

---

<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:** [February 15, 2012, 9:45am UTC](https://www.ruby-forum.com/t/per-non-ripetere-le-stesse-operazioni/216819/3 "2012-02-15T09:45:20Z")

</div>

2012/2/15 maurizio de magnis [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> > Nel metodo invite\_all devo fare delle operazioni sulla collection  
> > def set\_collection  
> > @q = # get q in the way you did for the index  
> > @categorizations = @q.result(:distinct =\> true)  
> > end
> 
> in questo modo nelle viste index.html.haml e invite\_all.html.haml  
> avrai a disposizione la variabile d’istanza @categorizations.

Giusto, grazie.

---

<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:** [February 15, 2012, 10:13am UTC](https://www.ruby-forum.com/t/per-non-ripetere-le-stesse-operazioni/216819/4 "2012-02-15T10:13:14Z")

</div>

On 15 February 2012 09:44, Mauro [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> > [cut]
> > 
> > def set\_collection  
> > @q = # get q in the way you did for the index  
> > @categorizations = @q.result(:distinct =\> true)  
> > end
> > 
> > in questo modo nelle viste index.html.haml e invite\_all.html.haml  
> > avrai a disposizione la variabile d’istanza @categorizations.
> 
> Giusto, grazie.

Invece non funziona, questo perche’ @categorizations viene valorizzato  
in base al parametro @q che a sua volta viene valorizzato solo al  
sbmit di un form di ricerca, uso ransack.  
Quindi @categorization di invite\_all non e’ filtrato in base a @q  
perche’ set\_collection chiamato prima di invite\_all non ha valori  
dentro @q non essendo valorizzato dal submit del form.  
In particolare:

class CategorizationsController \< InheritedResources::Base  
before\_filter :set\_collection, only: [:index, :invite\_all]

def index  
@categories = Category.all  
@services = Service.all  
end

def invite  
@categorization = Categorization.find(params[:id])  
@categorization.update\_attributes!(:invited =\> true, :invited\_at =\>  
Time.now)  
end

def invite\_all  
@categorizations.each do |categorization|  
categorization.update\_attributes(invited: true, invited\_at: Time.now  
)  
end  
end

private  
def set\_collection  
@operators\_to\_be\_invited = params[:operators\_to\_be\_invited]  
@q = Categorization.not\_invited.search(params[:q])  
@categorizations = @q.result(:distinct =\> true)  
unless @operators\_to\_be\_invited.nil? or  
@operators\_to\_be\_invited.empty?  
@categorizations =  
@categorizations.random(@operators\_to\_be\_invited.to\_i)  
end  
end

---

<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:** [February 15, 2012, 10:49am UTC](https://www.ruby-forum.com/t/per-non-ripetere-le-stesse-operazioni/216819/5 "2012-02-15T10:49:56Z")

</div>

2012/2/15 Mauro [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> > > > > …
> > > 
> > > Giusto, grazie.  
> > > before\_filter :set\_collection, only: [:index, :invite\_all]  
> > > end  
> > > @q = Categorization.not\_invited.search(params[:q])  
> > > Cioe’ riassegno a :q il suo stesso contenuto, spero non sia una bruttura.  
> > > Il problema pero’ e’ che in invite\_all il contenuto di @categorization  
> > > non e’ quello di quando viene chiamata index, poiche’ viene eseguito  
> > > il random, @categorizations =  
> > > @categorizations.random(@operators\_to\_be\_invited.to\_i).  
> > > Devo trovare un’altra soluzione quindi, la cosa piu’ logica sarebbe  
> > > poter passare @categorization a def invite\_all ma visto che mi e’  
> > > stato suggerito di usare before\_filter immagino non sia possibile.

---

<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:** [February 15, 2012, 10:35am UTC](https://www.ruby-forum.com/t/per-non-ripetere-le-stesse-operazioni/216819/6 "2012-02-15T10:35:01Z")

</div>

2012/2/15 Mauro [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> > > > end  
> > > > skip\_before\_filter :set\_collection, except: [:index, :invite\_all]
> 
> @categorizations = @q.result(:distinct =\> true)  
> unless @operators\_to\_be\_invited.nil? or @operators\_to\_be\_invited.empty?  
> @categorizations = @categorizations.random(@operators\_to\_be\_invited.to\_i)  
> end  
> end

Ho risolto ponendo

= link\_to “Invita tutti”, invite\_all\_categorizations\_path(:q =\>  
params[:q])

Cioe’ riassegno a :q il suo stesso contenuto, spero non sia una  
bruttura.

---

<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:** [February 15, 2012, 11:39am UTC](https://www.ruby-forum.com/t/per-non-ripetere-le-stesse-operazioni/216819/7 "2012-02-15T11:39:10Z")

</div>

On 15 February 2012 10:12, Mauro [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:  
[cut]

Hai postato il codice funzionante?

---

<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:** [February 15, 2012, 12:12pm UTC](https://www.ruby-forum.com/t/per-non-ripetere-le-stesse-operazioni/216819/8 "2012-02-15T12:12:12Z")

</div>

On 15 February 2012 11:38, maurizio de magnis  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> On 15 February 2012 10:12, Mauro [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:  
> [cut]
> 
> Hai postato il codice funzionante?

Quello che ho postato e’ il codice funzionante.  
In invite\_all mi serve avere @categories cosi’ come viene valorizzato  
dalla index.
