Подтвердить что ты не робот

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 с помощью нескольких загрузок изображений?

4b9b3361

Ответ 1

Чтобы получить изображения, принадлежащие к сообщению, вам необходимо выполнить итерацию по массиву изображений.

<% @post.images.each do |image| %>
  <%= attachment_image_tag(image, :file, :fill, 300, 300) %>
<% end %>

Вспомогательный attachment_image_tag принимает:

  • Объект [Refile:: Attachment]: экземпляр класса , который имеет прикрепленный файл.
  • [Символ] name: имя столбца вложения

Итак, @posts.images содержит массив объекта image. Это тот объект, у которого есть прикрепленный файл.

class Image < ActiveRecord::Base
  belongs_to :post
  attachment :file
end

Затем, когда вы повторяете images, вы указываете помощнику image object и имя столбца вложения здесь :file.

Ответ 2

Вы находитесь на главной ветке?

gem 'refile', require: "refile/rails", git: 'https://github.com/refile/refile.git', branch: 'master'