Ruby on rails Rails以错误的顺序保存模型

Ruby on rails Rails以错误的顺序保存模型,ruby-on-rails,has-one,Ruby On Rails,Has One,我已经四处搜索了一段时间,似乎不知道是什么原因造成的,我有一个模型在拯救一个志愿者和他的家庭和工作地址。我改变了一些事情(似乎不知道这对我来说意味着什么),现在地址还没有确定 这是我的主要模型: class HumanVolunteer < ActiveRecord::Base has_one :primaryPhone, :class_name => "PhoneNumber", :foreign_key => "id", :primary_key => "pho

我已经四处搜索了一段时间,似乎不知道是什么原因造成的,我有一个模型在拯救一个志愿者和他的家庭和工作地址。我改变了一些事情(似乎不知道这对我来说意味着什么),现在地址还没有确定

这是我的主要模型:

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
编辑:如果这是任何帮助,下面是日志中旧条目的示例:

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"=>"ken.koch@essencedesigns.net", "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", "ken.koch@essencedesigns.net"], ["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)
我能够回头查看日志并找到一个有效的,而人类志愿者是最后插入的东西。它先插入地址、电子邮件、电话,然后在插入志愿者时使用这些id

编辑:我也可以报告我没有收到任何错误,一切都经过了,只是数据没有连接

你知道什么会导致订单的变化吗?我看不出我改变了什么影响这件事

更新:我尝试更改has_one行,当我将这些行添加到以下位置时,至少产生了一个错误(无论是好是坏):

  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.
此外,如果我取出主键字段,它似乎可以工作,但它试图将它们都设置为相同的地址,我会得到相同的错误,但下一个id除外(每次尝试时都是22、23、24等)

也许这能说明问题?我要继续到处找

多谢各位,
-肯

我想出了一个似乎可行的解决方案

由于初始设置id后,一切似乎都正常,我只是在控制器中的“创建”操作下手动将其链接起来:

@human_volunteer.homeaddress.save
@human_volunteer.homeaddressid = @human_volunteer.homeaddress.id
@human_volunteer.workaddress.save
@human_volunteer.workaddressid = @human_volunteer.workaddress.id
现在,当志愿者被创建时,地址就被设置好了,其他一切都应该很好地执行

我能看到的唯一的额外考虑是,当我向地址添加验证器时,在允许创建整个内容之前,地址可以实际验证

谢谢大家,


-Ken

你不能查看你的提交历史记录,看看你修改了什么吗?我不确定rails如何将名称与名称大小写相混淆,但不应该属于:human\u志愿者应该属于:human志愿者?嘿,谢谢你的回复,我尝试使用:human志愿者,但没有成功。而且我还没有开始使用版本控制(只是在解决问题的早期阶段),所以我没有任何方法回退。
  has_one :workaddress, :class_name => "Address", :foreign_key => "id", :primary_key => "workaddress"
  has_one :homeaddress, :class_name => "Address", :foreign_key => "id", :primary_key => "homeaddress"
ActiveRecord::RecordNotUnique (PG::Error: ERROR:  duplicate key value violates unique constraint "addresses_pkey"
DETAIL:  Key (id)=(1) already exists.
@human_volunteer.homeaddress.save
@human_volunteer.homeaddressid = @human_volunteer.homeaddress.id
@human_volunteer.workaddress.save
@human_volunteer.workaddressid = @human_volunteer.workaddress.id