2

我在可能的 Rails 3.0.3 App 中遇到了这个问题,我认为这是一个愚蠢的错误,但我无法弄清楚它为什么会发生,或者事实上,我误解了 ActiveRecord 的行为,这并不是一个真正的错误。

这是场景,我有三个模型:


class User < ActiveRecord::Base  
    devise :database_authenticatable, :registerable,
    :recoverable, :rememberable, :trackable, :validatable  
    has_many :addresses, :as => :addressable  
    accepts_nested_attributes_for :addresses  
end

class Address < ActiveRecord::Base  
  belongs_to :addressable, :polymorphic => true  
  belongs_to :address_base  
  accepts_nested_attributes_for :address_base  
end  

class AddressBase < ActiveRecord::Base  
  has_many :address  
end

如果我尝试通过这种方式实例化一个传递哈希参数的新用户:


User.new({"addresses_attributes"=>  
    {"0"=>
        {"number"=>"10",
         "complement"=>"Next Starbucks",
         "address_base_attributes"=>
            {"city"=>"San Francisco",
             "zip_code"=>"00010",
             "district"=>"San Francisco",
             "id"=>"10",
             "street"=>"Market St.",
             "state"=>"CA"}
        }
    },
    "name"=>"Homer Simpson",
    "password_confirmation"=>"[FILTERED]",
    "document"=>"123321111",
    "password"=>"[FILTERED]",
    "email"=>"homer@simpson.com"
})

我面临错误

对于 ID= 的地址,找不到 ID=10 的 AddressBase

发生这种情况是因为 AddressBase 已经存在而 Address 不存在,如果我删除哈希的 AddressBase.id 参数一切正常,但我不想要它,因为这样,总是会为 Address 和地址库。我的意图是重用公共地址库,因此需要使用现有地址库的新地址的场景。

现在这是我的疑问,我在 AddressBase 哈希中缺少一些参数??比如说记录已经存在?还是ActiveRecord的belongs_to和has_many关联有问题?

提前致谢。

4

1 回答 1

1

问题是您不能在 rails 模型中大量分配 ID 属性(将 ID 提供给您初始化模型的数据哈希)。

我很难重现您的情况,但是如果您知道模型存在,则提供 address_base 的 id 而不是带有所有数据的哈希会更容易。

例如:

User.new({"addresses_attributes"=>  
  {"0"=>
      {"number"=>"10",
       "complement"=>"Next Starbucks",
       "address_base_id" => 10}
  },
  "name"=>"Homer Simpson",
  "password_confirmation"=>"[FILTERED]",
  "document"=>"123321111",
  "password"=>"[FILTERED]",
  "email"=>"homer@simpson.com"

})

于 2011-02-22T16:54:03.317 回答