Per non ripetere le stesse operazioni

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?

2012/2/15 Mauro [email protected]:
[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

2012/2/15 maurizio de magnis [email protected]:

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.

On 15 February 2012 09:44, Mauro [email protected] 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

2012/2/15 Mauro [email protected]:

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.

2012/2/15 Mauro [email protected]:

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.

On 15 February 2012 10:12, Mauro [email protected] wrote:
[cut]

Hai postato il codice funzionante?

On 15 February 2012 11:38, maurizio de magnis
[email protected] wrote:

On 15 February 2012 10:12, Mauro [email protected] 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.