Dunque, ho provato a seguire le guide per realizzare un form che
modifichi più models ma non ci sono riuscita.
Ho due tabelle Persone e Territori, con una relazione molti a molti, una
persona può amministrare più territori, un territorio può essere
amministrato nel tempo da più persone. Ho fatto di conseguenza la
tabella di collegamento AmministrazioneTerritori.
Ecco le tre tabelle:
class Persona < ActiveRecord::Base
has_many :amministrazioni_territori
has_many :territori, :through => :amministrazioni_territori
end
class Territorio < ActiveRecord::Base
has_many :amministrazioni_territori
has_many :persone, :through => :amministrazioni_territori
end
class AmministrazioneTerritorio < ActiveRecord::Base
belongs_to :persona
belongs_to :territorio
end
Questi i campi delle tabelle:
create_table “amministrazione_territori”, :force => true do |t|
t.integer “persona_id”, :null => false
t.integer “territorio_id”, :null => false
t.string “inizio_amministrazione”
t.string “fine_amministrazione”
t.string “carica”
t.datetime “created_at”
t.datetime “updated_at”
end
class CreatePersone < ActiveRecord::Migration
def self.up
create_table :persone do |t|
t.string :nome
t.string :famiglia
t.string :patronimico
t.string :variazione_nome
t.string :sesso
t.string :ind_temp1
t.string :int_nascita1
t.string :int_nascita2
t.string :ind_temp2
t.string :int_morte1
t.string :int_morte2
t.text :note
t.timestamps
end
end
def self.down
drop_table :persone
end
end
class CreateTerritori < ActiveRecord::Migration
def self.up
create_table :territori do |t|
t.string :denominazione
t.string :variazione_nome
t.string :articolazione_territoriale
t.text :descrizione
t.timestamps
end
end
def self.down
drop_table :territori
end
end
Vorrei quindi fare un form che mi permetta di:
- inserire tutti i dati anagrafici della persona in questione
- mi permetta di definire quali territori ha amministrato e in che
periodo - l’elenco dei territori amministrati venga recuperato dalla lista dei
territori già presenti nella tabella omonima
L’ho così realizzato (in realtà ho cominciato modificando il form di
modifica, in quanto volevo prima che fosse possibile aggiungere dati ad
una persona già esistente, poi farlo anche per una persona creata ex
novo):
Modifica persona
<% form_for(@persona) do |f| %>
<%= f.error_messages %>
<%= f.label :nome %>
<%= f.text_field :nome %>
<%= f.label :famiglia %>
<%= f.text_field :famiglia %>
<%= f.label :patronimico %>
<%= f.text_field :patronimico %>
<%= f.label :variazione_nome %>
<%= f.text_field :variazione_nome %>
<%= f.label :sesso %>
<%= f.text_field :sesso %>
Intervallo date di nascita
<%= f.select(:ind_temp1, %w[ v. p. d.], { :include_blank => true })
%> <%= f.text_field :int_nascita1, :size => 10 %>
-
<%= f.text_field :int_nascita2, :size => 10 %>
Intervallo date di morte
<%= f.select(:ind_temp2, %w[ v. p. d. q.], { :include_blank => true
}) %><%= f.text_field :int_morte1, :size => 10 %>
-
<%= f.text_field :int_morte2, :size => 10 %>
<%= t.label :carica %> <%= t.text_field :carica%>
<%= t.label :inizio_amministrazione %> <%= t.text_field :inizio_amministrazione%>
<%= t.label :fine_amministrazione %> <%= t.text_field :fine_amministrazione%>
<% end %>
<%= f.label :note %>
<%= f.text_area :note %>
<%= f.submit 'Update' %>
<% end %><%= link_to ‘Show’, @persona %> |
<%= link_to ‘Back’, persone_path %>
Le domande sono:
nella tabella AmministrazioneTerritorio ovviamente devo associare l’id
della persona e l’id del territorio? come faccio a passarglieli?
come faccio a recuperare nel menù a tendina i dati della tabella
territori?
così?
<%= t.label :territorio_id %> <%= @territori = Territorio.find(:all, :order => "name").map {|t| [t.name, t.id] } f.select(:name, @territori) %>
Grazie in anticipo a chiunque abbia voglia di aiutarmi! Sarei persa
senza di voi!
paola