Refile Gem: несколько загрузок файлов
Я использую Refile с Rails 4. Я следую их руководству по загрузке нескольких изображений. Каждый пост может иметь несколько изображений. Мои модели выглядят так:
post.rb:
has_many :images, dependent: :destroy
accepts_attachments_for :images, attachment: :file
Image.rb:
belongs_to :post
attachment :file
Я могу загружать файлы, хорошо с помощью:
<%= f.attachment_field :images_files, multiple: true, direct: true, presigned: true %>
но когда я пытаюсь получить изображение, как:
<%= attachment_image_tag(@post.images, :file, :small) %>
Я получаю ошибку:
undefined method file for #<Image::ActiveRecord_Associations_CollectionProxy:0x007fbaf51e8ea0>
Как я могу получить изображение с помощью функции refile, используя загрузку нескольких изображений?
2 ответа
Чтобы получить изображения, принадлежащие сообщению, необходимо выполнить итерацию по массиву изображений.
<% @post.images.each do |image| %>
<%= attachment_image_tag(image, :file, :fill, 300, 300) %>
<% end %>
Помощник attachment_image_tag
взять с собой:
- Объект [Refile::Attachment]: Экземпляр класса, к которому прикреплен файл.
- [Symbol] name: имя столбца вложения
Так вот, @posts.images
содержит массив image
объект. Это тот объект, который имеет прикрепленный файл.
class Image < ActiveRecord::Base
belongs_to :post
attachment :file
end
Затем, когда вы повторяете images
Дашь помощнику то image object
и имя столбца вложения, здесь :file
,
Вы на мастер ветке?
gem 'refile', require: "refile/rails", git: 'https://github.com/refile/refile.git', branch: 'master'