Refile gem: загрузка нескольких файлов

Я использую Refile с Rails 4. Я следую их руководству по загрузке нескольких изображений. Каждый пост может иметь несколько изображений. Мои модели выглядят так:

Пост.рб:

has_many :images, dependent: :destroy
accepts_attachments_for :images, attachment: :file

Изображение.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, используя загрузку нескольких изображений?


person the_    schedule 05.07.2015    source источник
comment
Вот источник для attachment_image_tag: github.com /refile/refile/blob/master/lib/refile/rails/   -  person the_    schedule 05.07.2015
comment
Я также забыл упомянуть, что если я делаю @post.images.inspect, я получаю ассоциацию с каждым объектом, имеющим файл nil, а для file_id установлено значение presigned, так что я думаю, что эта часть работает нормально. Просто когда я пытаюсь просмотреть изображение, оно выдает ошибку.   -  person the_    schedule 05.07.2015
comment
Что такое @post? Это отдельная запись или набор записей? Пожалуйста, опубликуйте код для @post.   -  person Pavan    schedule 10.07.2015
comment
@Pavan, @post — это отдельная запись. Я сделал @post.inspect на show.html.erb и получил: #<Post id: 2, name: "RefileTest", created_at: "2015-07-04 23:54:00", updated_at: "2015-07-04 23:54:00"   -  person Muhambi    schedule 10.07.2015


Ответы (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.

person Florent Ferry    schedule 05.07.2015
comment
@Frorent Ferry, это не работает, я получаю сообщение об ошибке: неопределенный метод `file' для #‹Image::ActiveRecord_Associations_CollectionProxy:0x007f8d1adb7b90› - person the_; 06.07.2015
comment
У вас есть «file_id:string» при переносе изображения? Вы запускали «rake db: migrate»? - person Florent Ferry; 06.07.2015
comment
@Frorent Ferry, да, у меня есть file_id:string для моей модели изображения. Он отображается в моем файле схемы, поэтому он определенно был перенесен. - person the_; 06.07.2015
comment
Так что это работает для меня. Вы установили images_files в сильных параметрах? params.require(:post).permit(..., images_files: []) Если да, я могу поделиться своим приложением репо, которое использовалось для написания моего ответа. - person Florent Ferry; 06.07.2015
comment
@frorent Ferry, у меня это уже есть в контроллере. Я хотел бы увидеть репо, если у вас есть шанс, спасибо! - person the_; 09.07.2015

Вы на главной ветке?

gem 'refile', require: "refile/rails", git: 'https://github.com/refile/refile.git', branch: 'master'
person Goodviber    schedule 08.04.2016
comment
Это должен быть комментарий - person ketan; 08.04.2016