Controller, vista, passaggio variabile e routes.rb

Ciao, la mia webapp è così strutturata:
DATABASE TABLE:
products:id, name, category_id(references categories(id),…
categories:id, name;

APP/CONTROLLER:
site_controller.rb

def list
@category_pages, @category = paginate :category, :per_page => 30
end

def list_cat
@product_pages,@category, @product = paginate :category, :per_page
=> 30

end

APP/VIEW/SITE
list.rhtml

    <table cellpadding="5" cellspacing="0">
    <%
    odd_or_even = 0
    for category in @category
      odd_or_even = 1 - odd_or_even
      cat = category.name
    %>
      <tr valign="top" <%= odd_or_even %>">

        <td>
           <%= link_to cat, :action => 'list_cat', :id => category

%>



<% end %>


list_cat.rhtml

Qui vorrei creare la lista dei prodotti presenti in una determinata categoria...

In pratica quello che vorrei è creare in list.rhtml una specie di menu
con tutte le categorie, e ognuna di queste sia un link_to list_cat.rhtml
che visualizza tutti i prodotti presenti in quella categoria
Qualcuno può aiutarmi?
Grazie, baci a tutti
Chiara

p.s.

Come faccio a configurare il file routes.rb affinchè il controller
riesca a leggermi una richiesta così strutturata:
site/list_cat/category_id (cos’ funzionerebbe, ma dopo non mi funziona
più list.rhtml la quale mi prende come parametro id e non category_id

Grazie ancora

Ciao Chiara per capire come funziona l’associazione alle categorie ti
consiglio di seguire attentamente la guida che trovi al seguente
indirizzo:

per la personalizzazione degli url e del routes.rb alcune info le puoi
trovare su di un mio precedente post:

http://www.ruby-forum.com/topic/132470#new

Chiara B. wrote:

p.s.

Come faccio a configurare il file routes.rb affinchè il controller
riesca a leggermi una richiesta così strutturata:
site/list_cat/category_id (cos’ funzionerebbe, ma dopo non mi funziona
più list.rhtml la quale mi prende come parametro id e non category_id

Grazie ancora

Se non ho capito male dall’esempio del messaggio precedente, site è il
tuo controller (scrivevi APP/VIEW/SITE)
Se è così non c’è bisogno di configurare routes.rb
Infatti con un’url tipo http://www.server.com/site/list_cat/category_id
category_id finisce in params[:id] nel metodo list_cat del controller
site

Se invece site fosse il tuo server (http://site/list_cat/category_id)
puoi usare questa rotta:

map.connect “list_cat/:id”, :controller => “list_cat”, :action => “cat”

che mette category_id dentro a params[:id] e lo passa al metodo cat del
controller list_cat.

Infine, sistemato questo magari potresti vedere come usare
link_to_remote al posto di link_to, per aggiornare solo il pezzo di menu
che vai ad espandere. Un po’ di AJAX non fa mai male :slight_smile: