我一直在尋找一段時間,似乎無法弄清楚是什麼造成這種情況,我有一個模型工作節省志願者和他的家庭和工作地址。我改變了一些東西(似乎無法弄清楚我的生活),現在地址沒有被設置。錯誤的訂單保存模型導軌
這是我的主要型號:
class HumanVolunteer < ActiveRecord::Base
has_one :primaryPhone, :class_name => "PhoneNumber", :foreign_key => "id", :primary_key => "phone_id"
has_one :primaryEmail, :class_name => "Email", :foreign_key => "id", :primary_key => "email_id"
has_one :work_adr, :class_name => "Address", :foreign_key => "id", :primary_key => "workaddressid"
has_one :home_adr, :class_name => "Address", :foreign_key => "id", :primary_key => "homeaddressid"
attr_accessible :firstName, :lastName, :homeaddressid, :notes, :status, :workaddressid, :home_adr, :work_adr,
:primaryPhone, :primaryEmail, :home_adr_attributes, :work_adr_attributes, :primaryPhone_attributes,
:primaryEmail_attributes
accepts_nested_attributes_for :home_adr
accepts_nested_attributes_for :work_adr
accepts_nested_attributes_for :primaryPhone
accepts_nested_attributes_for :primaryEmail
end
和地址型號:
class Address < ActiveRecord::Base
attr_accessible :city, :line1, :line2, :notes, :state, :zipcode
belongs_to :human_volunteer
end
繼承人從human_volunteers_controller片段
# GET /human_volunteers/new
# GET /human_volunteers/new.json
def new
@human_volunteer = HumanVolunteer.new
@human_volunteer.build_home_adr
@human_volunteer.build_work_adr
@human_volunteer.build_primaryPhone
@human_volunteer.build_primaryEmail
# Set the Breadcrumbs for this page
@breadcrumbs = { "Dashboard" => "/", "Human Volunteers" => "/human_volunteers"}
@current_page = "New Volunteer"
respond_to do |format|
format.html # new.html.erb
format.json { render :json => @human_volunteer }
end
end
# GET /human_volunteers/1/edit
def edit
@human_volunteer = HumanVolunteer.find(params[:id])
if(@human_volunteer.home_adr.nil?)
@human_volunteer.build_home_adr
end
if(@human_volunteer.work_adr.nil?)
@human_volunteer.build_work_adr
end
if(@human_volunteer.primaryPhone.nil?)
@human_volunteer.build_primaryPhone
end
if(@human_volunteer.primaryEmail.nil?)
@human_volunteer.build_primaryEmail
end
@breadcrumbs = { "Dashboard" => "/", "Human Volunteers" => "/human_volunteers"}
@current_page = "Edit Volunteer: <em>" + @human_volunteer.firstName + " " + @human_volunteer.lastName + "</em>";
end
# POST /human_volunteers
# POST /human_volunteers.json
def create
# create the volunteer
@human_volunteer = HumanVolunteer.new(params[:human_volunteer])
respond_to do |format|
if @human_volunteer.save
format.html { redirect_to @human_volunteer, :notice => @human_volunteer.firstName + ' ' + @human_volunteer.lastName + ' was successfully created.' }
format.json { render :json => @human_volunteer, :status => :created, :location => @human_volunteer }
else
format.html { render :action => "new" }
format.json { render :json => @human_volunteer.errors, :status => :unprocessable_entity }
end
end
end
# PUT /human_volunteers/1
# PUT /human_volunteers/1.json
def update
@human_volunteer = HumanVolunteer.find(params[:id])
respond_to do |format|
if @human_volunteer.update_attributes(params[:human_volunteer])
format.html { redirect_to @human_volunteer, :notice => @human_volunteer.firstName + ' ' + @human_volunteer.lastName + ' was successfully updated.' }
format.json { head :no_content }
else
format.html { render :action => "edit" }
format.json { render :json => @human_volunteer.errors, :status => :unprocessable_entity }
end
end
end
我可以看到什麼我認爲這個問題通過查看日誌,人類志願者首先得到保存,使用地址碼的空值s,然後地址被保存(也與電話號碼和電子郵件模型相同的問題,它們與地址設置相同),然後地址被保存,然後人類志願者不會再次用新值更新:
Parameters: {"authenticity_token"=>"dD+ut6noFPw8mJHq4rUJpuNBD1o+q0Hi8a+qOeetzMc=", "utf8"=>"✓", "human_volunteer"=>{"lastName"=>"Koch", "work_adr_attributes"=>{"line1"=>"", "line2"=>"", "zipcode"=>"", "state"=>"", "city"=>""}, "primaryEmail_attributes"=>{"email"=>""}, "primaryPhone_attributes"=>{"number"=>""}, "notes"=>"", "home_adr_attributes"=>{"line1"=>"123 Who Knows land", "line2"=>"", "zipcode"=>"11741", "state"=>"TS", "city"=>"testville"}, "firstName"=>"Ken", "status"=>"Investigative Candidate"}}
(0.2ms) BEGIN
(0.2ms) COMMIT
(0.2ms) BEGIN
(0.1ms) COMMIT
(0.1ms) BEGIN
(0.1ms) COMMIT
(0.1ms) BEGIN
(0.1ms) COMMIT
(0.1ms) BEGIN
SQL (2.3ms) INSERT INTO "human_volunteers" ("created_at", "email_id", "firstName", "homeaddressid", "lastName", "notes", "phone_id", "status", "updated_at", "workaddressid") VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10) RETURNING "id" [["created_at", Tue, 07 Aug 2012 16:47:16 UTC +00:00], ["email_id", nil], ["firstName", "Ken"], ["homeaddressid", nil], ["lastName", "Koch"], ["notes", ""], ["phone_id", nil], ["status", "Investigative Candidate"], ["updated_at", Tue, 07 Aug 2012 16:47:16 UTC +00:00], ["workaddressid", nil]]
SQL (0.8ms) INSERT INTO "phone_numbers" ("created_at", "notes", "number", "phone_id", "phone_type", "updated_at") VALUES ($1, $2, $3, $4, $5, $6) RETURNING "id" [["created_at", Tue, 07 Aug 2012 16:47:16 UTC +00:00], ["notes", nil], ["number", ""], ["phone_id", nil], ["phone_type", nil], ["updated_at", Tue, 07 Aug 2012 16:47:16 UTC +00:00]]
SQL (0.7ms) INSERT INTO "emails" ("created_at", "email", "notes", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "id" [["created_at", Tue, 07 Aug 2012 16:47:16 UTC +00:00], ["email", ""], ["notes", nil], ["updated_at", Tue, 07 Aug 2012 16:47:16 UTC +00:00]]
SQL (0.9ms) INSERT INTO "addresses" ("city", "created_at", "line1", "line2", "notes", "state", "updated_at", "zipcode") VALUES ($1, $2, $3, $4, $5, $6, $7, $8) RETURNING "id" [["city", ""], ["created_at", Tue, 07 Aug 2012 16:47:16 UTC +00:00], ["line1", ""], ["line2", ""], ["notes", nil], ["state", ""], ["updated_at", Tue, 07 Aug 2012 16:47:16 UTC +00:00], ["zipcode", nil]]
SQL (0.5ms) INSERT INTO "addresses" ("city", "created_at", "line1", "line2", "notes", "state", "updated_at", "zipcode") VALUES ($1, $2, $3, $4, $5, $6, $7, $8) RETURNING "id" [["city", "testville"], ["created_at", Tue, 07 Aug 2012 16:47:16 UTC +00:00], ["line1", "123 Who Knows land"], ["line2", ""], ["notes", nil], ["state", "TS"], ["updated_at", Tue, 07 Aug 2012 16:47:16 UTC +00:00], ["zipcode", 11741]]
(17.8ms) COMMIT
編輯:如果這是任何幫助這裏是日誌中的舊條目的例子:
Started POST "/human_volunteers" for 127.0.0.1 at Sat Jul 28 09:08:59 -0400 2012
Processing by HumanVolunteersController#create as HTML
Parameters: {"human_volunteer"=>{"firstName"=>"Ken", "work_adr"=>{"city"=>"", "state"=>"", "zipcode"=>"", "line1"=>"", "line2"=>""}, "status"=>"Trainee", "home_adr"=>{"city"=>"fdsa", "state"=>"Nasdf", "zipcode"=>"11729", "line1"=>"asdf fdsafd", "line2"=>""}, "primaryEmail"=>"[email protected]", "primaryPhone"=>"6316813806", "lastName"=>"Koch", "notes"=>"\r\nHes a good guy"}, "authenticity_token"=>"bgbecE+nMxNrPtleNOLfO/MqRib0cXmDMqL5JaPyC10=", "utf8"=>"✓"}
[1m[36m (0.1ms)[0m [1mBEGIN[0m
[1m[35mSQL (0.5ms)[0m INSERT INTO "emails" ("created_at", "email", "notes", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "id" [["created_at", Sat, 28 Jul 2012 13:08:59 UTC +00:00], ["email", "[email protected]"], ["notes", nil], ["updated_at", Sat, 28 Jul 2012 13:08:59 UTC +00:00]]
[1m[36m (19.1ms)[0m [1mCOMMIT[0m
[1m[35m (0.1ms)[0m BEGIN
[1m[36mSQL (0.5ms)[0m [1mINSERT INTO "phone_numbers" ("created_at", "notes", "number", "phone_id", "phone_type", "updated_at") VALUES ($1, $2, $3, $4, $5, $6) RETURNING "id"[0m [["created_at", Sat, 28 Jul 2012 13:08:59 UTC +00:00], ["notes", nil], ["number", "6316813806"], ["phone_id", nil], ["phone_type", nil], ["updated_at", Sat, 28 Jul 2012 13:08:59 UTC +00:00]]
[1m[35m (56.9ms)[0m COMMIT
[1m[36m (0.1ms)[0m [1mBEGIN[0m
[1m[35mSQL (2.5ms)[0m INSERT INTO "addresses" ("city", "created_at", "line1", "line2", "notes", "state", "updated_at", "zipcode") VALUES ($1, $2, $3, $4, $5, $6, $7, $8) RETURNING "id" [["city", ""], ["created_at", Sat, 28 Jul 2012 13:08:59 UTC +00:00], ["line1", ""], ["line2", ""], ["notes", nil], ["state", ""], ["updated_at", Sat, 28 Jul 2012 13:08:59 UTC +00:00], ["zipcode", nil]]
[1m[36m (9.4ms)[0m [1mCOMMIT[0m
[1m[35m (0.1ms)[0m BEGIN
[1m[36mSQL (0.5ms)[0m [1mINSERT INTO "addresses" ("city", "created_at", "line1", "line2", "notes", "state", "updated_at", "zipcode") VALUES ($1, $2, $3, $4, $5, $6, $7, $8) RETURNING "id"[0m [["city", "Deer Park"], ["created_at", Sat, 28 Jul 2012 13:08:59 UTC +00:00], ["line1", "294 West 15th St"], ["line2", ""], ["notes", nil], ["state", "NY"], ["updated_at", Sat, 28 Jul 2012 13:08:59 UTC +00:00], ["zipcode", 11729]]
[1m[35m (7.0ms)[0m COMMIT
[1m[36m (0.1ms)[0m [1mBEGIN[0m
[1m[35mSQL (1.1ms)[0m INSERT INTO "human_volunteers" ("created_at", "email_id", "firstName", "homeaddressid", "lastName", "notes", "phone_id", "status", "updated_at", "workaddressid") VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10) RETURNING "id" [["created_at", Sat, 28 Jul 2012 13:08:59 UTC +00:00], ["email_id", 5], ["firstName", "Ken"], ["homeaddressid", 14], ["lastName", "Koch"], ["notes", "\r\nHes a good guy"], ["phone_id", 11], ["status", "Trainee"], ["updated_at", Sat, 28 Jul 2012 13:08:59 UTC +00:00], ["workaddressid", 13]]
[1m[36m (6.1ms)[0m [1mCOMMIT[0m
Redirected to http://localhost:3000/human_volunteers/1
Completed 302 Found in 178ms (ActiveRecord: 112.1ms)
我能回頭到日誌中,找到一個工作,而human_volunteer是最後一件事插入。它首先插入地址,電子郵件,電話,然後在插入志願者時使用這些ID。
編輯:我也可以報告,我沒有得到任何錯誤,一切都經過,只是數據沒有連接。
任何想法可能導致訂單的變化?我看不到我改變了任何影響這一點的事情。
更新:我試圖改變HAS_ONE線和能夠至少產生一個錯誤(更好或更差),當我cahnged行到:
has_one :workaddress, :class_name => "Address", :foreign_key => "id", :primary_key => "workaddress"
has_one :homeaddress, :class_name => "Address", :foreign_key => "id", :primary_key => "homeaddress"
它嘗試使用addressid 1每次我也得到
ActiveRecord::RecordNotUnique (PG::Error: ERROR: duplicate key value violates unique constraint "addresses_pkey"
DETAIL: Key (id)=(1) already exists.
另外,如果我拿出primary_key領域,似乎工作,但它試圖將它們均設置爲相同的地址,我也得到了同樣的錯誤,除了與下一個ID(22,23 ,每次我嘗試24次等)
也許這可以解釋一些問題?我會繼續刺激。
非常感謝你, - 肯
你不能在你的提交歷史看看,看看你修改了什麼? – 2012-08-07 17:05:45
我不確定導軌如何使用NameCasing破壞名稱,但不應該* belongs_to:human_volunteer * be * belongs_to:humanvolunteer *? – 2012-08-07 17:09:14
嘿謝謝你的回覆,我試過使用:humanvolunteer,而不是運氣。我還沒有開始使用版本控制(只是在工作的早期階段),所以我沒有任何方式回滾。 – 2012-08-07 17:54:34