Rails 3.0.3 Appでこの問題に直面していますが、これはばかげたエラーだと思いますが、なぜそれが起こっているのか、 ActiveRecordの動作を誤解していて、実際にはエラーではありません。"Could not find"エラーActiveRecord.newメソッド
これはシナリオですが、私は三つのモデルました:私はこの方法によって、ハッシュパラメータを渡す新しいユーザーをインスタンス化しようとした場合
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"=>"[email protected]"
})
私はエラーに直面
Couldn't find AddressBase with ID=10 for Address with ID=
そして、それAddressBaseがすでに存在し、アドレスがないので、私はAddressBを削除した場合、それは、たまたまハッシュのase.idパラメータはすべて動作しますが、この方法では常にAddressとAddressBaseの新しいレジスタが作成されるため、必要ありません。私の意図は、AddressBaseのコモンズを再利用しているため、既存のAddressBaseを持つ新しいAddressのシナリオが必要になります。
これは私の疑問です。私はAddressBaseハッシュにいくつかのパラメータがありませんか?レコードがすでに存在していると言っているような何か?それとも、ActiveRecordのbelongs_toとhas_manyの関連付けに問題がありますか?
ありがとうございます。
ありがとう!それは私が本当に見ることができなかったことです。問題がシナリオを持っているので、AddressBaseがすでに存在するので、私はハッシュでaddress_base_idを渡します.2番目のシナリオは、AddressBaseが彼が作成される必要があり、私は彼がハッシュのすべての値を渡す必要があります、私はこれを行う方法を把握しようとします。どうもありがとうございました。 – avaz
また、まずHash.deleteメソッドなどでparamsハッシュからキーを削除してから、address_base_idを持つ新しい値をハッシュに追加するかどうかを確認します。 –
私は私のコントローラでチェックをしています。私はハッシュの "id"をもう何も渡していません。コントローラーで、データベース内の指定されたzip_codeにAddressBaseが既に存在するかどうかを確認します。直接 'user.addresses.first.address_base = address_base_from_database'を参照してください(これは単なるスニペットです)。falseの場合は、ユーザーを保存するだけで、アドレスとaddress_baseが作成されます。しかし、私が望むのは、この問題を直接的に解決することです。なぜ、ハッシュがAddressのレジスタを探すためにAddressBaseの 'id'を持っているのですか?これはbelongs_toの共通の動作ですか? – avaz