Ruby Forum Italian Ruby user group > [rails] will_paginate - metodi e proprietà?

Posted by Luca Reghellin (stratboy)
on 30.09.2007 14:25
Salve! Sto dando un'occhiata al plug-in will_paginate. Facile, funziona
tutto. Ho visto come si pagina e anche i vari metodi paginate_by_+, solo
che volevo capirci di più: esattamente, dalla view, che metodi e che
varialbili ho a disposizione oltre a quelli di base?
Tipo, se voglio farmi sputare la current_page o pages_count, che sono
proprietà del plugin (ho spulciato anche tutto il codice e visto i docs
online), come faccio dalla view?
Se ad esempio voglio vedere @total_pages, è possibile? E devo per forza
passare dal controller?
E il mio ipotetico @posts (= Post.paginate blabla), oltre ai find
mascherati da paginate, eredita qualcos'altro di tutte le proprietà dei
vari oggetti di paginazione standard di Rails?

Preciso che comunque sono un principiante...

Anyone? ;)
Posted by Luca Reghellin (stratboy)
on 01.10.2007 18:24
Comincio a rispondermi da solo, ma ogni aggiunta e aiuto è assolutamente 
gradita.

Intanto il mio @posts, che in soldoni è un'istanza di 
WillPaginate::Collection, sia nel controller sia nella view è rifornito 
dei seguenti metodi:

page_count > ritorna @total_pages

offset > titorna il numero di entries pari alla prima-1 della pagina 
corrente. In altre parole, se ce ne sono 30 per pagina, la prima della 
pagina 2 è la numero 31 e dunque l'offset == 30.

previous_page > ritorna, se c'è, @current_page-1

next_page > ritorna, se c'è, @current_page+1

---

Lo stesso oggetto è rifornito delle seg. proprietà:

- current_page
- per_page
- total_entries


Per ora è tutto. Attendo aiuti/suggerimenti! :)














Luca Reghellin wrote:
> 
> Salve! Sto dando un'occhiata al plug-in will_paginate. Facile, funziona
> tutto. Ho visto come si pagina e anche i vari metodi paginate_by_+, solo
> che volevo capirci di più: esattamente, dalla view, che metodi e che
> varialbili ho a disposizione oltre a quelli di base?
> Tipo, se voglio farmi sputare la current_page o pages_count, che sono
> proprietà del plugin (ho spulciato anche tutto il codice e visto i docs
> online), come faccio dalla view?
> Se ad esempio voglio vedere @total_pages, è possibile? E devo per forza
> passare dal controller?
> E il mio ipotetico @posts (= Post.paginate blabla), oltre ai find
> mascherati da paginate, eredita qualcos'altro di tutte le proprietà dei
> vari oggetti di paginazione standard di Rails?
> 
> Preciso che comunque sono un principiante...
> 
> Anyone? ;)
Posted by tarini (Guest)
on 01.10.2007 19:15
(Received via mailing list)
>
> Luca Reghellin wrote:
> >
> > Salve! Sto dando un'occhiata al plug-in will_paginate. Facile, funziona
> > tutto. Ho visto come si pagina e anche i vari metodi paginate_by_+, solo
> > che volevo capirci di più: esattamente, dalla view, che metodi e che
> > varialbili ho a disposizione oltre a quelli di base?


domanda magari stupida (il plugin in questione non l'ho mai usato)

quali vantaggi da l'uso di questo plugin rispetto al paginate di default 
di
rails?? dai metodi che hai descritto non mi sembra ci sia niente in 
più...

--
everything has got to end sometime we were satellites drifting off into
space
vega 4 - burn and fade away
Posted by Luca Reghellin (stratboy)
on 01.10.2007 21:02
Beh, il metodo di default non lo conosco molto bene. Sono partito quasi 
subito col plugin perché paginate (sembra già ufficiale, è scritto anche 
nei docs: 
http://api.rubyonrails.com/classes/ActionController/Pagination.html) 
verrà tolto e spostato appunto in un plug-in nella versione 2.0 di 
rails.
Essendo che sto imparando rails, mi adeguo già ed evito di perder tempo. 
Solo che di questo plugin la documentazione non è molto prolissa, e 
presuppone che a leggerla non sia un principiante.

Non è l'unico comunque, ce n'è almeno un altro:

http://paginator.rubyforge.org/

e anche questo:

http://cardboardrocket.com/pages/paginating_find

Ciao!






tarini wrote:
>>
>> Luca Reghellin wrote:
>> >
>> > Salve! Sto dando un'occhiata al plug-in will_paginate. Facile, funziona
>> > tutto. Ho visto come si pagina e anche i vari metodi paginate_by_+, solo
>> > che volevo capirci di pi�: esattamente, dalla view, che metodi e che
>> > varialbili ho a disposizione oltre a quelli di base?
> 
> 
> domanda magari stupida (il plugin in questione non l'ho mai usato)
> 
> quali vantaggi da l'uso di questo plugin rispetto al paginate di default 
> di
> rails?? dai metodi che hai descritto non mi sembra ci sia niente in 
> pi�...

> --
> everything has got to end sometime we were satellites drifting off into
> space
> vega 4 - burn and fade away
Posted by Luca Reghellin (stratboy)
on 01.10.2007 21:04
Posted by Luca Guidi (Guest)
on 01.10.2007 21:41
(Received via mailing list)
tarini ha scritto:
> quali vantaggi da l'uso di questo plugin rispetto al paginate di default di
> rails?? dai metodi che hai descritto non mi sembra ci sia niente in più...

Il paginate di default è deprecato e non più contenuto nella imminente
versione 2.0.
Per maggiori dettagli:

http://dev.rubyonrails.org/ticket/8157
http://dev.rubyonrails.org/changeset/6992
http://dev.rubyonrails.org/changeset/6993

--
blog: www.lucaguidi.com

Bringing Rails to Italy
First italian Ruby On Rails conference:
Oct, 26-27 2007 - Pisa
www.railstoitaly.org
Posted by Luca Reghellin (stratboy)
on 01.10.2007 22:21
Altra piccola scoperta: paginate non è altro che un find un po' furbo, e 
di conseguenza mantiene anche un po' delle sue caratteristiche:

Modo standard:
@entries = Entry.paginate :page => params[:page], :per_page => 10

Supporta le opzioni di find, come :order
@entries = Entry.paginate :page => params[:page], :per_page => 10, 
:order => "title DESC"

supporta i finders dinamici:
@entries = Entry.paginate_by_title 'titolo 2', :page => params[:page], 
:per_page => 10


Nota: copio incollo dal mio codice. @entries sono quelli che prima 
chiamavo genericamente @posts.


Per ora è tutto.





> 
> Comincio a rispondermi da solo, ma ogni aggiunta e aiuto è assolutamente 
> gradita.
> 
> Intanto il mio @posts, che in soldoni è un'istanza di 
> WillPaginate::Collection, sia nel controller sia nella view è rifornito 
> dei seguenti metodi:
> 
> page_count > ritorna @total_pages
> 
> offset > titorna il numero di entries pari alla prima-1 della pagina 
> corrente. In altre parole, se ce ne sono 30 per pagina, la prima della 
> pagina 2 è la numero 31 e dunque l'offset == 30.
> 
> previous_page > ritorna, se c'è, @current_page-1
> 
> next_page > ritorna, se c'è, @current_page+1
> 
> ---
> 
> Lo stesso oggetto è rifornito delle seg. proprietà:
> 
> - current_page
> - per_page
> - total_entries
> 
> 
> Per ora è tutto. Attendo aiuti/suggerimenti! :)
> 
Posted by Cosimo Guglielmucci (laj)
on 29.11.2007 10:07
> Supporta le opzioni di find, come :order
> @entries = Entry.paginate :page => params[:page], :per_page => 10, 
> :order => "title DESC"

Ciao,
leggevo i tuoi commenti perché nell'usare il plugin non riesco ad 
utilizzare una di queste opzioni.
Il problema sussiste quando aggiungo l'opzione :joins al paginate che ho 
inserito nel model( sto usando Rails ).

Ecco il codice:
  paginate :page => page,
      :conditions => condition, :per_page => 10,
      :joins => "inner join Fornitore on Fornitore.CodiceFornitore = 
ListinoProdotto.CodiceFornitore ",
      :order => sort

senza il join ovviamente non ottengo le informazioni desiderate.
La cosa sconcertante è che l'errore restituito non mi aiuta a trovare 
una soluzione:

    DBI::DatabaseError in ListinoprodottoController#confezionamento

37000 (8156) [Microsoft][ODBC SQL Server Driver][SQL Server]La colonna 
'CodiceFornitore' � stata specificata pi� volte per 'tally'.

RAILS_ROOT: ./script/../config/..
Application Trace | Framework Trace | Full Trace

e:/ruby/lib/ruby/site_ruby/1.8/DBD/ODBC/ODBC.rb:168:in `execute'
e:/ruby/lib/ruby/site_ruby/1.8/dbi/dbi.rb:640:in `execute'
e:/ruby/lib/ruby/site_ruby/1.8/dbi/dbi.rb:671:in `select_all'
e:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/connection_adapters/sqlserver_adapter.rb:366:in 
`add_limit_offset!'
e:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/base.rb:1139:in 
`add_limit!'
e:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/base.rb:1101:in 
`construct_finder_sql'
e:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/base.rb:997:in 
`find_every'
e:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/base.rb:418:in 
`find'
#{RAILS_ROOT}/vendor/plugins/will_paginate/lib/will_paginate/finder.rb:106:in 
`send'
#{RAILS_ROOT}/vendor/plugins/will_paginate/lib/will_paginate/finder.rb:106:in 
`method_missing'
#{RAILS_ROOT}/vendor/plugins/will_paginate/lib/will_paginate/collection.rb:52:in 
`create'
#{RAILS_ROOT}/vendor/plugins/will_paginate/lib/will_paginate/finder.rb:104:in 
`method_missing'
#{RAILS_ROOT}/app/models/listinoprodotto.rb:10:in 
`display_product_quantity'
#{RAILS_ROOT}/app/controllers/listinoprodotto_controller.rb:49:in 
`confezionamento'
-e:4:in `load'
-e:4

Viene presentato come un errore del Database ma se eseguita in console 
la query funziona.

Vorrei anche riportare il bug ma prima devo capire dove nasce il 
problema.
Spero mi lasciate il vostro aiuto.
Grazie.
Posted by Giovanni Intini (Guest)
on 29.11.2007 10:20
(Received via mailing list)
Scusa la domanda, magari è stupida, ma perché stai facendo un join?
Non basta un has_many/has_one con relativo belongs_to nel modello?

Il giorno 29/nov/07, alle ore 10:07, Cosimo Guglielmucci ha scritto:
Posted by Luca Reghellin (stratboy)
on 29.11.2007 10:28
Ciao Cosimo,

purtroppo io sono ancora un principiante in termini di db, vengo da 10 
anni di client-side e mi sto affacciano solo ora al lato server, quindi 
quando mi parli di join, so cosa vuoi dire ma non ho idea dei motivi del 
baco...

Se posso darti un consiglio però, se te la cavi un po' con l'inglese, 
dopo pranzo quando di là si svegliano, fai un giro nel forum ufficiale 
di rails.
Senza nulla togliere al nostro, di la normalmente sono di + e c'è + 
gente che ti risponde e di solito in fretta.

http://www.ruby-forum.com/forum/3

Hola! :)



Cosimo Guglielmucci wrote:
>> Supporta le opzioni di find, come :order
>> @entries = Entry.paginate :page => params[:page], :per_page => 10, 
>> :order => "title DESC"
> 
> Ciao,
> leggevo i tuoi commenti perché nell'usare il plugin non riesco ad 
> utilizzare una di queste opzioni.
> Il problema sussiste quando aggiungo l'opzione :joins al paginate che ho 
> inserito nel model( sto usando Rails ).
> 
> Ecco il codice:
>   paginate :page => page,
>       :conditions => condition, :per_page => 10,
>       :joins => "inner join Fornitore on Fornitore.CodiceFornitore = 
> ListinoProdotto.CodiceFornitore ",
>       :order => sort
> 
> senza il join ovviamente non ottengo le informazioni desiderate.
> La cosa sconcertante è che l'errore restituito non mi aiuta a trovare 
> una soluzione:
> 
>     DBI::DatabaseError in ListinoprodottoController#confezionamento
> 
> 37000 (8156) [Microsoft][ODBC SQL Server Driver][SQL Server]La colonna 
> 'CodiceFornitore' � stata specificata pi� volte per 'tally'.
> 
> RAILS_ROOT: ./script/../config/..
> Application Trace | Framework Trace | Full Trace
> 
> e:/ruby/lib/ruby/site_ruby/1.8/DBD/ODBC/ODBC.rb:168:in `execute'
> e:/ruby/lib/ruby/site_ruby/1.8/dbi/dbi.rb:640:in `execute'
> e:/ruby/lib/ruby/site_ruby/1.8/dbi/dbi.rb:671:in `select_all'
> e:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/connection_adapters/sqlserver_adapter.rb:366:in 
> `add_limit_offset!'
> e:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/base.rb:1139:in 
> `add_limit!'
> e:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/base.rb:1101:in 
> `construct_finder_sql'
> e:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/base.rb:997:in 
> `find_every'
> e:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/base.rb:418:in 
> `find'
> #{RAILS_ROOT}/vendor/plugins/will_paginate/lib/will_paginate/finder.rb:106:in 
> `send'
> #{RAILS_ROOT}/vendor/plugins/will_paginate/lib/will_paginate/finder.rb:106:in 
> `method_missing'
> #{RAILS_ROOT}/vendor/plugins/will_paginate/lib/will_paginate/collection.rb:52:in 
> `create'
> #{RAILS_ROOT}/vendor/plugins/will_paginate/lib/will_paginate/finder.rb:104:in 
> `method_missing'
> #{RAILS_ROOT}/app/models/listinoprodotto.rb:10:in 
> `display_product_quantity'
> #{RAILS_ROOT}/app/controllers/listinoprodotto_controller.rb:49:in 
> `confezionamento'
> -e:4:in `load'
> -e:4
> 
> Viene presentato come un errore del Database ma se eseguita in console 
> la query funziona.
> 
> Vorrei anche riportare il bug ma prima devo capire dove nasce il 
> problema.
> Spero mi lasciate il vostro aiuto.
> Grazie.
Posted by Cosimo Guglielmucci (laj)
on 04.12.2007 12:15
Giovanni Intini wrote:
> Scusa la domanda, magari � stupida, ma perch� stai facendo un join?
> Non basta un has_many/has_one con relativo belongs_to nel modello?
> 
> Il giorno 29/nov/07, alle ore 10:07, Cosimo Guglielmucci ha scritto:

Ciao Giovanni,
in realtà il problema è:
come faccio ad ordinare la tabella alfabeticamente ma in base al campo 
della tabella belongs_to( cui appartiene ) ?
Posted by Giovanni Intini (Guest)
on 04.12.2007 12:35
(Received via mailing list)
Model.find :all, :includes => :associated_model, :order => 
'tabellachetiinteressa_campo ASC'

Le mail ti raggiungono ovunque con BlackBerry® from Vodafone!
Posted by Cosimo Guglielmucci (laj)
on 04.12.2007 16:27
Grazie Giovanni,
funziona anche con will_paginate :-)))
Posted by Giovanni Intini (Guest)
on 04.12.2007 16:38
(Received via mailing list)
Np, basta chiedere :)

Il giorno 04/dic/07, alle ore 16:27, Cosimo Guglielmucci ha scritto:
Posted by Marco Mastrodonato (marcomd)
on 21.04.2008 10:11
Riesumo la discussione per chiedervi che plugin usate voi per fare la 
paginazione, quelli che mi piacciono di più sono questi due:
http://cardboardrocket.com/pages/paginating_find
http://mislav.caboo.se/rails/will_paginate-love/

di cardboardrocket.com mi piace il fatto che utilizza il classico find e 
gli passa i parametri per fare la paginazione es.
#  @cogs = Cog.find(:all,
# :page => {:size => 10,
# :current => params[:page]})

will_paginate sembra abbia più fans e fornisce funzionalità aggiuntive 
come il named_scope

Non saprei su cosa puntare, mi piacerebbe sapere la vostra opinione.
Posted by Marco Mastrodonato (marcomd)
on 21.04.2008 11:34
Devo precisare che li vorrei usare con richieste ajax, will_paginate è 
molto comodo perchè crea in automatico nella vista anche la gestione 
della paginazione ma purtroppo non è in ajax, anche se lo fosse credo 
sarebbe difficile gestire casi specifici o mi sbaglio?
Esempio un form con un button il cui click riempie una div. Ora dovrei 
fare che il link della paginazione effettuasse altre chiamate ajax con i 
parametri del form. Lo farei semplicemente agganciando il tag a con 
prototype e passando il numero della pagina come parametro.
La domanda è sempre la stessa, qualcuno ha già fatto qualcosa del 
genere?
Posted by Luca Guidi (Guest)
on 21.04.2008 14:27
(Received via mailing list)
Ciao Marco,
Io ho risolto il problema in questo modo:

app/controllers/sources_controller.rb:
class SourcesController < ApplicationController
   def index
     @sources = Source.paginate :page => params[:page], :per_page => 10

     respond_to do |format|
       format.html # index.html.erb
       format.js do
         render :update do |page|
           page.replace_html 'sources', :partial => 'sources'
         end
       end
     end
   end
end

app/views/sources/index.html.erb:
<h1>Sources</h1>
<div id="sources">
   <%= render :partial => 'sources' %>
</div>

app/views/sources/_sources.html.erb:
<!-- qui implementi la tua view -->
<%= will_paginate @sources %>

Poi, scarica LowPro, copialo in public/javascripts ed includilo nel tag
head.
Crea un file sources.js e scrivi:

Event.addBehavior.reassignAfterAjax = true;
Event.addBehavior({
   'div.pagination a' : Remote.Link
});


Fatto! In questo modo se javascript è attivo, i link contenuti nel div
con class pagination, verranno trasformati in Remote.Link, ovvero il
loro 'onclick' effettuerà chiamate AJAX. Se javascript è disabilitato,
LowPro non riuscirà in questa operazione, quindi i link si comporteranno
in modo classico, passando il numero di pagina come parametro della get
request.
ES: /sources?p=1

Luca
Posted by Andrea Franz (Guest)
on 21.04.2008 14:39
(Received via mailing list)
On Mon, Apr 21, 2008 at 2:26 PM, Luca Guidi <guidi.luca@gmail.com> 
wrote:

>
> Event.addBehavior.reassignAfterAjax = true;
> Event.addBehavior({
>   'div.pagination a' : Remote.Link
> });


Io di solito faccio una cosa del genere anche con prototype riassegnando
l'observer dopo la chiamata ajax.Avevo messo qui un esempio:

http://gravityblast.com/2008/03/25/will_paginate-with-ajax-and-unobtrusive-javascript/
Posted by Luca Guidi (Guest)
on 21.04.2008 14:47
(Received via mailing list)
Si, è equivalente, solo che nel mio caso è LowPro a fare il lavoro sporco.
Posted by Marco Mastrodonato (marcomd)
on 21.04.2008 17:22
Grazie Luca e grazie anche ad Andrea.
Uso già Lowpro ma quello che dici l'ho capito solo in parte, l'avevo 
letto anche quà:
http://railsontherun.com/2007/9/27/ajax-pagination-in-less-than-5-minutes

nel frattempo che lavoravo ho risolto con un sistema ibribo ma mi 
piacerebbe capire quello che mi hai descritto.

Nel controller ho:

@pippo = Pippo.paginate(:all, :page=>(params[:page]||1), 
:conditions=>["datains >= ? and datains <= 
?",params[:ricerca][:data_da],params[:ricerca][:data_a] ] )

questo è il javascript che acchiappa i tag "a", nel layout:

Event.addBehavior.reassignAfterAjax = true;
Event.addBehavior({
  <%= yield :extend_behavior_js %>
});

e nella view:

<% content_for :extend_behavior_js do -%>
//--  pagination
'div.pagination a:click' : function(e) {
var div_dest = 'inq_result'
new Ajax.Updater(
div_dest,
this.href,
{
  asynchronous:true,
  evalScripts:true,
  onLoading:function(){
    $(div_dest).innerHTML='<img src="images/ajax_loading.gif" border="0" 
/>';
  },
  parameters:Form.serialize($('frm_inquiry')) + '&authenticity_token=' + 
encodeURIComponent('217195cdb07d8deabe70098cf5189c20613a0fe5')
}
);
return false;
}
<% end -%>


Tralasciando il sistema per personalizzare la Event.addBehavior, questo 
è il mio sistema "ibrido" e devo dire che funziona

Quello che non ho capito è questo codice:
     respond_to do |format|
       format.html # index.html.erb
       format.js do
         render :update do |page|
           page.replace_html 'sources', :partial => 'sources'
         end
       end
     end

e neanche questo:
'div.pagination a' : Remote.Link

Remote.Link lo devo sostituire col mio href?
Posted by Luca Guidi (Guest)
on 21.04.2008 17:43
(Received via mailing list)
Iniziamo con Remote.Link, è un oggetto di LowPro, si fa carico di
trasformare il tuo tradizionale link in uno che effettua chiamate remote
asincrone (AJAX). Ovviamente utilizzar l'attributo href per sapere dove
indirizzare la request.

Il blocco respond_to è una feature di Rails 2.0, se sei a digiuno, ti
consiglio vivamente di studiarla. Rende il tuo controller in grado di
rispondere ad uno o più mime types.
La prima riga di codice "cattura" le richieste sincrone (non AJAX), e si
occupa di renderizzare il file index.html.erb.
La seconda riga è diversa, cattura le richieste AJAX, esegue quel blocco
passato come argomento e rispedisce il codice javascript che il client
deve eseguire.  In questo caso gli diciamo di sostituire il contenuto
dell'elemento che ha come 'sources' come id, renderizzando di nuovo il
partial 'sources'.

Non a caso app/views/sources/index.html.erb:
<h1>Sources</h1>
<div id="sources">
   <%= render :partial => 'sources' %>
</div>

Quindi, ricapitolando, se JavaScript è abilitato, LowPro trasforma i
tuoi link in oggetti che effettuano chiamate AJAX, a cui risponde il
secondo blocco di codice del tuo controller, che si occuperà di
aggiornare il DOM della tua view.
Nel caso contrario (JavaScript disabilitato) i tuoi link avranno un
comportamento tradizionale (chiamate sincrone), quindi passeranno il
numero di pagina come parametro della GET request. In questo caso sarà 
format.html ad occuparsi semplicemente di renderizzare la tua view.

Spero d'essere stato chiaro.
Luca
Posted by Marco Mastrodonato (marcomd)
on 22.04.2008 16:52
Grazie Luca, gentilissimo anche se non mi è chiara una cosa: sources è 
presente sia come partials che come vista?

Inoltre non mi funziona se volessi allegare alla richiesta asincrona i 
dati di un form, viene generato un errore in prototype, come se non 
trovasse il mio form ma invece esiste, l'ho testato con firebug, bo!

Event.addBehavior({
  '#add_item' : Remote.Link({
    onLoading: function(){
      $('dynamic').update('Attendi...');
    }
  ,onComplete:function(){
      $('dynamic').hide().visualEffect('BlindDown');
  }
  ,parameters:Form.serialize($('frm_test'))
  })
});

se lascio solamente la onLoading e la onComplete invece funziona, non è 
che con Remote.Link non è previsto altro che non siano gli stati della 
richiesta??
Posted by Luca Guidi (Guest)
on 22.04.2008 17:14
(Received via mailing list)
No, sources è presente solo come partial.
Remote.Link è un oggetto di LowPro che wrappa Ajax.Request (Prototype),
accetta due parametri, il primo è un element, il secondo un hash di 
options.

Prova 
così:Event.addBehavior({
   'div.pagination a:click' : function(e) {
     new Remote.Link(event.element(), {
       onLoading: {
  // blablabla
       }
     });
   }
});

Non ho testato sto codice, quindi se non funziona, ti consiglio di
studiare il codice di Remote (lowpro.js:255)

Luca
Posted by Marco Mastrodonato (marcomd)
on 30.04.2008 09:46
Grazie Luca, in effetti non funziona ma lo sto utilizzando come spunto.

Tornando al codice per veicolare le richieste ajax:

       format.js do
         render :update do |page|
           page.replace_html 'sources', :partial => 'sources'
         end
       end

se volessi elaborare diversi partial, a seconda di un parametro, io ho 
fatto così:

      format.js do
          render :update do |page|
            case operazione
            when nil
              page.replace_html 'new1', :partial => 'new1'
            when '2'
              page.replace_html 'new2', :partial => 'new2'
            else
              page.replace_html 'new'+operazione, :partial => 
'new'+operazione
            end
          end
      end

però non funziona come vorrei, utilizza sempre il partial _new1 anche se 
la variabile operazione è valorizzata correttamente, cosa sbaglio??
Posted by Luca Guidi (Guest)
on 05.05.2008 09:50
(Received via mailing list)
Ciao Marco,
Quello che ti posso consigliare, lo riassumo in una parola: debug.
Vedi se realmente la variabile operazione è correttamente valorizzata e
prova ad esplicitare 'return' alla fine di ogni caso dello switch.

Come mai hai bisogno di questa implementazione? Sicuro che non c'è 
qualcosa di più lineare?

Luca
--
blog: www.lucaguidi.com
Pro-Netics: www.pro-netics.com
Sourcesense - making sense of Open Source: www.sourcesense.com
Posted by Marco Mastrodonato (marcomd)
on 06.05.2008 14:47
Ciao Luca, ho risolto col debug. Andava bene quel codice, l'errore era 
che non includevo lowpro ed i link non erano ajax, una banalità.
Alla fine ho eliminato il case ed utilizzo solo un istruzione:

format.js do
  render :update do |page|
    page.replace_html 'new'+@step, :partial => 'new'+@step
  end
end

non so se sia il metodo migliore: devo aggiornare delle div in base alla 
variabile @step. La creazione (new dello scaffold) la faccio fare con 
delle scelte in 3 passi ed i tre partial si richiamano a cascata. Usando 
il sistema usato per la paginazione riesco ad avere javascript 
unobstrusive, lo scopo era questo.

-> new.html.erb -> div new1
(prima scelta che mi aggiorna la div new1 evidenziando cosa ho scelto ed 
in base a questo riempie la div new2)
-> new.html.erb -> div new1 -> div new2
(seconda scelta che mi aggiorna la div new2 e mi riempie la div new3)
-> new.html.erb -> div new1 -> div new2 -> div new3
(mostra il form specifico e crea il record il base alle scelte 
precedenti)
-> fine

Funziona anche senza ajax perchè controllando la variabile @step 
all'interno delle viste includo o meno i partial a cascata.

Se c'è un metodo migliore ben venga!