Имитация выбора файла для Active Storage в irb - PullRequest
1 голос
/ 27 апреля 2020

Создание нового элемента для Active Storage.

<!-- app/views/docs/_form.html.erb -->
  <%= f.label :image, "Select document or image that support this information." %>
  <%= f.file_field  :image %>

Я получаю ошибку Please review the problems below, когда нажимаю Create и думал, что увижу, какие ошибки происходят в irb. Но как мне смоделировать вышеуказанный шаг.

Модели:

# models/doc.rb
class Doc < ApplicationRecord
  has_one_attached :image # Active Storage
  belongs_to :source
  belongs_to :docable, polymorphic: true

# models/source.rb
class Source < ApplicationRecord
  has_many :docs

# models/year.rb
class Year < ApplicationRecord
  belongs_to :location
  belongs_to :person
  has_many :docs, as: :docable

# models/person.rb
class Person < ApplicationRecord
  has_many :years, dependent: :destroy
  has_many :locations, through: :years
  has_many :docs, as: :docable

# models/location.rb
class Location < ApplicationRecord
  has_many :years
  has_many :people, through: :years
  has_many :docs, as: :docable

Где человек жил или работал на дату, указывается в годах. введите год, лицо и местонахождение, наберите c, чтобы показать ссылку на эту информацию. Источник - название старой книги, и я представляю различные страницы в книге. Позже я ссылаюсь на эти изображения, используя docable (это план).

дБ / структура. sql: CREATE INDEX index_docs_on_docable_type_and_docable_id ON public.docs USING btree (docable_type, docable_id);

Вот сеанс:

irb(main):100:0> doc = Doc.new
=> #<Doc id: nil, source_id: nil, page_no: nil, original_url: nil, basename: nil, created_at: nil, updated_at: nil, notes: nil, docable_id: nil, docable_type: nil>
irb(main):101:0> doc.save
=> false
irb(main):102:0> doc.errors.messages
=> {:source=>["must exist"], :docable=>["must exist"]}
 irb(main):104:0> doc.source_id = 4
=> 4
irb(main):105:0> doc.save
   (42.8ms)  BEGIN
  Source Load (45.3ms)  SELECT "sources".* FROM "sources" WHERE "sources"."id" = $1 LIMIT $2  [["id", 4], ["LIMIT", 1]]
   (0.2ms)  ROLLBACK
=> false
irb(main):106:0> doc.errors.messages
=> {:docable=>["must exist"]}
irb(main):107:0> doc.image =

У меня могут быть проблемы с отношениями polymorphi c, поэтому я пытаюсь разобраться с этим.

1 Ответ

2 голосов
/ 27 апреля 2020

https://edgeguides.rubyonrails.org/active_storage_overview.html#attaching -файлов-объектов

doc.image.attach(io: File.open('/path/to/file'), filename: 'file.jpg')
...