Как получить все имена файлов в папке, заданной в enum в Rails? - PullRequest
0 голосов
/ 10 сентября 2018

Использование Rails 5.

Есть несколько файлов по пути:

ls app/assets/
a.jpg b.jpg c.jpg

Теперь используйте этот способ, чтобы получить все имена файлов под моделью:

assets_path = Rails.root.join('app', 'assets')
assets_files = Dir.entries(assets_path).select { |f| !File.directory? f}

enum image: assets_files

Однако невозможно получить настоящий файл, используя этот путь в index.html.erb:

- @products.each do |product|
  = product.image

Даже если в базе данных есть a.jpg данные.

Другая проблема, установите этот элемент выбора в представлении _form.html.erb:

= f.select :image, Product.images.map {|k, v| [k, k]}

это может быть показано в элементе выбора HTML:

<select name='product[image]' id='product_image'>
  <option value='a.jpg'>a.jpg</option>
  <option value='b.jpg'>b.jpg</option>
  <option value='c.jpg'>c.jpg</option>
</select>

Но после сохранения данных найдено 1 в дБ при выборе a.jpg.

Что-то не так?

1 Ответ

0 голосов
/ 10 сентября 2018

Из документов: https://api.rubyonrails.org/classes/ActiveRecord/Enum.html

Объявите атрибут enum, в котором значения отображаются в целые числа в базе данных.

Так что, если вы передадите массив (что вы делаете), он будет хранить индекс данного объекта, а не значение.

Что вы можете сделать, это передать хэш:

assets_path = Rails.root.join('app', 'assets')
assets_files = assets_path.entries.reject(&File.method(:directory?))


enum image: assets_files.map { |img| [img, img] }.to_h
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...