Как избежать Errno :: EISDIR: каталог - читается, когда запускается начальная миграция? - PullRequest
0 голосов
/ 26 ноября 2018

У меня трудные времена с загрузкой семян из файла YAML - все работает нормально, пока не попробую загрузить пост без изображения (изображение: ноль)

#seeds.rb
    posts_file = Rails.root.join('db', 'seeds', 'fixtures', 'posts.yml')
    posts = YAML::load_file(posts_file)
    images_path = Rails.root.join('db', 'seeds', 'fixtures', 'images')

    posts.each do |post|

      Post.create(
          title: post['title'],
          content: post['content'],
          created_at: post['created_at'],
          updated_at: post['updated_at'],
          deleted_at: post['deleted_at'],
          post_img: File.open("#{images_path}#{post['post_img']}")
      )

    end

и файл YAML:

-
  title: 'Title1'
  content: 'some content for post'
  created_at: 
  updated_at:
  deleted_at:
  post_img: '/image1jpg'


-
  title: 'Title 2'
  content: 'some content for post'
  created_at: 
  updated_at:
  deleted_at:
  post_img:

Если я заполню оба поля post_img, все будет работать нормально, но когда одно из них будет пустым, получим эту ошибку:

Errno :: EISDIR: Это каталог

, что означаетчто он читает всю папку изображений.Как найти способ избежать этой ошибки?

1 Ответ

0 голосов
/ 26 ноября 2018

Проблема в том, что когда post_img пусто / nil, File.open("#{images_path}#{post['post_img']}") - это каталог (images_path) вместо файла, как говорится в сообщении об ошибке.Вы можете сделать что-то вроде:

  file = File.open("#{images_path}#{post['post_img']}") if post['post_img'].present?
  Post.create(
      title: post['title'],
      content: post['content'],
      created_at: post['created_at'],
      updated_at: post['updated_at'],
      deleted_at: post['deleted_at'],
      post_img: file
  )

Это создаст сообщение с нулевым изображением на случай, если post_img пусто / ноль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...