Ruby on rails &引用;不能';“找不到”;错误ActiveRecord.new方法
我在5月份的Rails 3.0.3应用程序中遇到了这个问题,我认为这是一个愚蠢的错误,但我不明白为什么会发生这种情况,或者事实上,我误解了ActiveRecord的行为,这并不是一个真正的错误 这是一个场景,我有三个模型:Ruby on rails &引用;不能';“找不到”;错误ActiveRecord.new方法,ruby-on-rails,activerecord,has-many,belongs-to,Ruby On Rails,Activerecord,Has Many,Belongs To,我在5月份的Rails 3.0.3应用程序中遇到了这个问题,我认为这是一个愚蠢的错误,但我不明白为什么会发生这种情况,或者事实上,我误解了ActiveRecord的行为,这并不是一个真正的错误 这是一个场景,我有三个模型: class User < ActiveRecord::Base devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :v
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
我面对错误
Couldn't find AddressBase with ID=10 for Address with ID=
对于ID为的地址,找不到ID为10的AddressBase=
这是因为AddressBase已经存在,而Address不存在,如果我删除hash的AddressBase.id参数,一切都会正常工作,但我不希望这样,因为这样,总是会为Address和AddressBase创建一个新的寄存器。我的意图是重用commons AddressBase,因此有必要使用现有AddressBase创建新地址
这就是我的疑问,我在AddressBase散列中遗漏了一些参数??比如说记录已经存在?或者这是ActiveRecord所属的多个关联的问题
提前感谢。问题在于您无法在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"
})谢谢@danny hiemstra!你的建议是我真正不想看到的。我现在只需要考虑如何构建视图来实现这种情况,因为问题有一些场景,一个是AddressBase已经存在,所以我将在哈希中传递address_base_id,第二个场景是AddressBase不存在,所以需要创建他,我需要在哈希中传递他所有的值,我会想办法解决这个问题。非常感谢。另外,您可能要做的是首先检查它是否存在,如果它确实使用hash.delete方法从params散列中删除了密钥,然后使用address\u base\u id向散列添加一个新值。我正在我的控制器中进行检查,我不再传递散列中的“id”,在控制器中,我检查数据库中是否已经存在带有给定邮政编码的AddressBase,如果为true,我只需直接设置引用
user.addresses.first.address\u base=address\u base\u from_database
(这只是一个片段),如果为false,我只需保存用户并创建地址和地址\u base。但我想要的是直接在视图中解决这个问题。当散列具有AddressBase的id
时,为什么要使用rails呢?他试图查找地址寄存器,这是所属的常见行为?
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"