Ответ 1
После некоторой проблемы с этой проблемой я обнаружил, что проблема возникла, когда :multipart => true
добавлен в f.file_field
, так как имя поля формы изменяется от user[photo]
до user[photo][]
.
Использование отдельной страницы для прикрепления фотографий
Я хочу иметь отдельную страницу для загрузки нескольких файлов в запись (и еще одну для редактирования свойств пользователя). Это выглядит как временное решение, но оно работает. Вместо f.form_field :photo, :multipart => true
я использовал form_field_tag 'user[photo]', :multiple => true
в представлении.
Мой код выглядит следующим образом:
## app/model/user.rb
has_attached_file :photo
def to_fileupload_json
{
"name" => photo_file_name,
"size" => photo_file_size,
...
}
end
## app/views/photos/new.html.haml
= form_for @user, :url => users_path, :html => { :multipart => true } do |f|
#fileupload
= file_field_tag 'user[photo]', :multiple => true
= f.submit
= javascript_include_tag "jquery.fileupload.js"
# require all other JS files needed for the plugin (jQuery, jQuery UI, ...)
= stylesheet_link_tag "jquery.fileupload-ui.css"
= render :partial => "jquery_file_templates" # partial with jQuery templates for responses
:javascript
$(function () {
uploader = $('#fileupload').fileupload()
}
## app/controllers/users_controller.rb
def create
@user = User.create params[:user]
end
Если кто-то еще знает лучший способ (правильный путь) сделать это, сообщите нам об этом!
Использование полей_for
В зависимости от структуры вашего приложения вы можете использовать fields_for
.
В этом случае вам придется:
- добавить
accepts_nested_attributes_for :photos
в вашу (пользовательскую) модель. - добавьте метод
photos_attribues=(attributes)
в вашу (пользовательскую) модель и создайте там запись записи. - записать запись для фотографий
3.times { @user.photos.build }
в пользовательском новом методе
Пример:
def photos_attribues=(attributes)
attributes.each do |key, value|
photo = Photo.create :photo => value, ...
end
end
Отказ от ответственности: приведенный выше код был упрощен/переписан, чтобы было легче понять. Возможно, я допустил ошибки при удалении ненужных вещей. И снова - я не совсем уверен, что это правильный способ решения этой проблемы. Предложения и улучшения более чем приветствуются!