On Apr 1, 2008, at 1:08 PM, Matteo Buferli wrote:
inseriti per A ma anche dei dati per B, C, e D comprensivi della
chiave
primaria (id) di A appena create (e’ settata come autoincrement).
Spero di essere stato abbastanza chiaro, nel caso saro’ lieto di
esplicare il mio problema magari con uno schema.
Facciamo un esempio semplice (ai limiti dello stupido…): un form per
creare un contatto (Contact) e un
indirizzo collegato (Address)
Contact ha 2 campi (first_name e last_name) e una relazione
(has_many :addresses) verso Address.
Address ha 2 campi (street_address e city) e una relazione
(belongs_to :contact) verso Contact
Il controller:
class ContactsController
def new
@contact = Contact.new
@address = Address.new
end
def create
@contact = Contact.new(params[:contact])
if @contact.save
@address = @contact.addresses.build(params[:address])
if @address.save
redirect_to contact_url(@contact) and return
end
end
render :action => “new”
end
end
il template:
<% form_for @contact do |f| %>
<%= error_messages_for(“contact”) %>
First name: <%= f.text_field(:first_name)
Last name: <%= f.text_field(:last_name)
<% fields_for @address do |af| %>
<%= error_messages_for("address") %>
Address: <%= af.text_field(:street_address) %>
City: <%= af.text_field(:city) %>
<%= submit_tag "Create" %>
<% end %>
Spero sia abbastanza chiaro (e di non aver fatto errori
S.
PS
per correttezza il codice di #create dovrebbe gestire il caso in cui
@contact e’ valido ma @address no (per esempio con una transazione)