ruby1.8.7のrails3.0アプリを1.92の3.2アプリに移行しています。1つを除いて、すべてのテストに合格しています。以下にたくさんのテキストがありますが、問題を見るのは複雑ではありません。私は少し長蛇の列にならなければなりませんでした。
Paperclipで処理されるファイルであるhas_manyUploadsのEメールモデルがあります。ローカルファイルを使用してアップロードファイルのネストされた属性を送信する3.0/1.8.7で機能していた作成テストがあります。テストにはGemfileを使用しました。これは小さく、常にリポジトリに含まれるためです。
テストは次のように記述されます。
creatable_attributes = creatable_resource.attributes.merge( {"uploads_attributes"=>[{"name"=>"", "member_id"=>"764", "file"=>File.new('Gemfile')}]} )
post :create, post_var => creatable_attributes
ここで、両方のリポジトリブランチ(3.0/1.8.7と3.2/1.92)の3つのデバッグ情報を示します。ネストされたアップロードが保存されない原因となる主な違いがわかりますが、わかりません。それを修正する方法。
1)テストで送信前に表示されたとおりに送信されたデータ2)受信側コントローラーで表示されたデータ3)コントローラーで作成された対応するアップロード
* 3.0/1.8.7-「動作中」バージョン*
1)テストで送信前に表示されたように送信されたデータ
{
"uploads_attributes" => [
[0] {
"file" => #<File:Gemfile> -rw-r--r-- 1 benlieb staff 2506 Jan 26 13:15 Gemfile,
"member_id" => "764",
"name" => ""
}
],
"created_at" => nil,
"subject" => "string_28636",
"markup_filter" => nil,
"member_id" => 6891662,
"body" => "string_29201",
"updated_at" => nil
}
2)受信コントローラーに表示されるパラメーター
{
"controller" => "emails",
"email" => {
"uploads_attributes" => [
[0] {
"file" => #<File:Gemfile> -rw-r--r-- 1 benlieb staff 2506 Jan 26 13:15 Gemfile,
"member_id" => "764",
"name" => ""
}
],
"created_at" => nil,
"subject" => "string_28636",
"member_id" => 6891662,
"markup_filter" => nil,
"updated_at" => nil,
"body" => "string_29201"
},
"action" => "create"
}
3)コントローラーで作成された対応するアップロード(これは機能し、保存されます)
[
[0] #<Upload:0x104a9b168> {
:id => nil,
:name => "",
:member_id => 764,
:file_file_name => "Gemfile",
:file_content_type => "text/plain",
:file_file_size => 2506,
:file_updated_at => Sat, 26 Jan 2013 13:16:51 EST -05:00,
:created_at => nil,
:updated_at => nil
}
]
* 3.2/1.9.2-「失敗した」バージョン*
1)テストで送信前に表示されたように送信されたデータ(ファイルは3.0 / 1.9.2と同じであることに注意してください)
{
"id" => nil,
"subject" => "string_3556259",
"body" => "string_35571",
"member_id" => 1644867,
"markup_filter" => nil,
"created_at" => nil,
"updated_at" => nil,
"uploads_attributes" => [
[0] {
"name" => "",
"member_id" => "764",
"file" => #<File:Gemfile> -rw-r--r-- 1 benlieb staff 2828 Jan 26 13:34 Gemfile
}
]
}
2)受信側コントローラーに表示されるパラメーター(ファイルデータが変更されていることに注意してください)
{
"email" => {
"id" => nil,
"subject" => "string_3556259",
"body" => "string_35571",
"member_id" => "1644867",
"markup_filter" => nil,
"created_at" => nil,
"updated_at" => nil,
"uploads_attributes" => [
[0] {
"name" => "",
"member_id" => "764",
"file" => "#<File:0x0000010343d1f0>"
}
]
},
"controller" => "emails",
"action" => "create"
}
3)コントローラーで作成された対応するアップロード(このファイルは保存に失敗し、問題が発生しました)
[
[0] #<Upload:0x000001061aeee0> {
:id => nil,
:name => "",
:member_id => 764,
:file_file_name => nil,
:file_content_type => nil,
:file_file_size => nil,
:file_updated_at => nil,
:created_at => nil,
:updated_at => nil
}
]
そしてここに良い測定のためのいくつかのファイルがあります:https ://gist.github.com/4643779
だから私の質問は何が起こっているのか、そしてどうすればそれを修正できるのかということです。