Hi everyone...
I got some problem..
I got 2 related tables.. and its DDL looklike this..
DDL
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++
CREATE TABLE tblvilages (
icnumber character varying(15) PRIMARY KEY,
name character varying(80),
gender character varying(1)
);
CREATE TABLE tblvilagesaddress (
runningid serial PRIMARY KEY,
icnumber character varying(15) REFERENCES tblvilages(icnumber) ON
DELETE CASCADE,
address1 varchar(50),
address2 varchar(50),
address3 varchar(50)
);
Controller
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++
def experiment
@datas = []
@datas[0] = {"icnumber"=>"870412039981", "name"=>"MOHD
YUSRIZAL B. MOHD YUSOF", "gender"=>"L", "address1"=>"Jalan Aru",
"address2"=>"Off Jalan Sultan Sulaiman", "address3"=>"Taman Sri
Angkasa"}
@datas[1] = {"icnumber"=>"870107018824", "name"=>"ZAILAWATI
BTE MARKISAN", "gender"=>"P", "address1"=>"Pos 23, Lorong Atap",
"address2"=>"Taman Segar", "address3"=>""}
@datas[2] = {"icnumber"=>"861121091122", "name"=>"ASYANTI A/P
MURUGAN", "gender"=>"P", "address1"=>"No. 23, Jalan Utama",
"address2"=>"Mukim Segantang", "address3"=>""}
@datas[3] = {"icnumber"=>"870513076654", "name"=>"LEE KIM
SHE", "gender"=>"P", "address1"=>"No. 29, Kampung Paya Jarak",
"address2"=>"Mukim Sepanggar", "address3"=>""}
@datas[4] = {"icnumber"=>"870612091121", "name"=>"MOHD ABBAS
BIN SUHAIMI", "gender"=>"L", "address1"=>"A-9-12, Apartment Sri
Andalas,", "address2"=>"Jalan Sri Kundang", "address3"=>"Taman Segar"}
@datas.each do |data|
test_person = {}
test_person["icnumber"] = data["icnumber"]
test_person["name"] = data["name"]
test_person["gender"] = data["gender"]
@person = TestPerson.new(test_person)
@
person.id = test_person["icnumber"]
test_person_address = {}
test_person_address["icnumber"] = @
person.id
test_person_address["address1"] = data["address1"]
test_person_address["address2"] = data["address2"]
test_person_address["address3"] = data["address3"]
@person_address =
TestPersonAddress.new(test_person_address)
# method 1
@person.save
@person_address.save
# method 2
TestPersonAddress.transaction do
@person.save
@person_address.save
end
# method 3
TestPerson.transaction do
@person.save
@person_address.save
end
# method 4
@person.test_person_addresses << @person_address
@person.save
end
end
model : TestPerson
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++
class TestPerson < ActiveRecord::Base
set_table_name "tblvilages"
set_primary_key :icnumber
has_many :test_person_addresses
end
model : TestPersonAddress
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++
class TestPersonAddress < ActiveRecord::Base
set_table_name "tblvilagesaddress"
set_primary_key :runningid
belongs_to :test_person, :class_name=>"TestPerson", :foreign_key=>:icnumber
end
problem:
actually I've try 4 different method (as shown in the controller) to
insert the data into the database,
but, only method 1 and 2 successful.. and method 3 and 4 was failed.
Actually my goal is to use method 4. I've try this using 2 different
databases (Postgresql and MSSQL)
but the result still the same... anybody can explain to me why method
3 and 4 results failure ?
If I used method 3 and 4, the result will look like this:
PGError: ERROR: insert or update on table "tblvilagesaddress"
violates foreign key constraint "tblvilagesaddress_icnumber_fkey"
DETAIL: Key (icnumber)=(870412039981) is not present in table
"tblvilages".
: INSERT INTO tblvilagesaddress ("address1", "address2", "address3",
"icnumber") VALUES('Jalan Aru', 'Off Jalan Sultan Sulaiman', 'Taman
Sri Angkasa', '870412039981')
notes: I need to remain the DLL's naming column and model's naming for
some reason...
thanks