I need help


#1

Avevo gia’ posto il problema ma sono in stand by da alcuni giorni.
Purtroppo e’ solo da alcune settimane che sto facendo conoscenza con
rails e molte cose mi sfuggono, soprattutto troppi concetti tutti
assieme mi hanno mandato in confusione.
Ho tre tabelle settori, categorie e utenti.
Settori e categorie sono in relazione uno a molti, categorie e utenti
molti a molti.
Vorrei fare in modo che all’inserimento di un nuovo utente abbia la
possibilita’ di selezionare un settore in base al quale mi viene
fornita la lista delle relative categorie.
Scelta la categoria o le categorie, viene creato il nuovo utente,
oppure aggiornato, e gli viene assegnata la categoria o le categorie
di appartenenza.
Sono riuscito ad arrivare fino al punto in cui posso selezionare il
settore e mi vengono mostrate le categorie di appartenenza ma e’
codice fatto con i piedi, comunque:

nelle view di utente ho il partial dei campi del form relativi
all’utente, es:

<%= f.label :"nome e cognome" %>
<%= f.text_field :nome %>

<%= f.label :note %>
<%= f.text_area :notes %>

<%= render :partial => "sector_categories" %>

il partial sector_categories contiene:

<%= collection_select "category", :sector_id, @sectors, :id, :name, :prompt => "seleziona il settore" %>

<%= observe_field :category_sector_id, :frequency => 2, :update => 'category_container', :url => {:action => 'filter_category_in_sector'}, :with => "'sector_id='+value" %>

l’action filter_category_in_sector fa un
@categories = Category.find_all_by_sector_id(params[:sector_id])
render :layout => false

Ovviamente per tale action devo avere una view, se ho capito bene come
funziona rails, pertanto la view relativa all’action e’:
filter_categories_in_sector.html.erb e contiene:

<% for category in @categories %>
<%= check_box_tag “category”, category.id %>
<%= category.name %>
<% end %>

e qui mi sono fermato.
Non so come fare in modo di assegnare le categorie selezionate
all’utente nel momento in cui ne viene creato uno nuovo oppure viene
aggiornato uno esistente.
Se c’e’ qualche anima buona per poterlo fare passo passo gliene sarei
grato almeno posso superare questo stato di stand by.


#2

Vediamo se ho capito.

In div#category_container ci va l’elenco delle categorie, che sono delle
checkbox. L’utente dell’applicazione deve selezionarne una o più e poi
cliccare il submit per creare l’utente.

Se le checkbox sono dentro al form, saranno inviate a rails anche loro
insieme a tutti gli altri campi. Per verificarlo controlla il log, dove
vedrai anche il loro nome in params[]. Però pare troppo semplice, forse
c’è qualcosa che mi sfugge.

Paolo

Msan M. wrote:

Avevo gia’ posto il problema ma sono in stand by da alcuni giorni.
Purtroppo e’ solo da alcune settimane che sto facendo conoscenza con
rails e molte cose mi sfuggono, soprattutto troppi concetti tutti
assieme mi hanno mandato in confusione.
Ho tre tabelle settori, categorie e utenti.
Settori e categorie sono in relazione uno a molti, categorie e utenti
molti a molti.
Vorrei fare in modo che all’inserimento di un nuovo utente abbia la
possibilita’ di selezionare un settore in base al quale mi viene
fornita la lista delle relative categorie.
Scelta la categoria o le categorie, viene creato il nuovo utente,
oppure aggiornato, e gli viene assegnata la categoria o le categorie
di appartenenza.
Sono riuscito ad arrivare fino al punto in cui posso selezionare il
settore e mi vengono mostrate le categorie di appartenenza ma e’
codice fatto con i piedi, comunque:

nelle view di utente ho il partial dei campi del form relativi
all’utente, es:

<%= f.label :"nome e cognome" %>
<%= f.text_field :nome %>

<%= f.label :note %>
<%= f.text_area :notes %>

<%= render :partial => "sector_categories" %>

il partial sector_categories contiene:

<%= collection_select "category", :sector_id, @sectors, :id, :name, :prompt => "seleziona il settore" %>

<%= observe_field :category_sector_id, :frequency => 2, :update => 'category_container', :url => {:action => 'filter_category_in_sector'}, :with => "'sector_id='+value" %>

l’action filter_category_in_sector fa un
@categories = Category.find_all_by_sector_id(params[:sector_id])
render :layout => false

Ovviamente per tale action devo avere una view, se ho capito bene come
funziona rails, pertanto la view relativa all’action e’:
filter_categories_in_sector.html.erb e contiene:

<% for category in @categories %>
<%= check_box_tag “category”, category.id %>
<%= category.name %>
<% end %>

e qui mi sono fermato.
Non so come fare in modo di assegnare le categorie selezionate
all’utente nel momento in cui ne viene creato uno nuovo oppure viene
aggiornato uno esistente.
Se c’e’ qualche anima buona per poterlo fare passo passo gliene sarei
grato almeno posso superare questo stato di stand by.