Я переношу приложение rails 3.0 на ruby 1.8.7 в приложение 3.2 на 1.92. Все тесты проходят, кроме одного. Ниже много текста, но проблему не сложно увидеть. Я просто должен был быть немного многословным.
У меня есть модель электронной почты, в которой есть_много загрузок, которые представляют собой файлы, обрабатываемые с помощью Paperclip. У меня есть тест создания, который работал в 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). Вы увидите ключевое отличие, из-за которого вложенная загрузка не сохранить, и я не знаю, как это исправить.
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
Итак, мой вопрос в том, что происходит и как я могу это исправить.