Как я могу получить URL моего вложения, хранящегося в активном хранилище в моем контроллере rails - PullRequest
0 голосов
/ 19 мая 2018

Как я могу получить URL моего вложения модели has_one, хранящегося в активном хранилище в моем контроллере rails.Так что я мог бы отправить его как полную ссылку, как API в JSON.До сих пор я пробовал следующие методы, но каждый из них вызывает различные проблемы:

1) current_user.image.service_url ---- неопределенный метод `service_url 'для #

2) Rails.application.route.url_helpers.rails_disk_blob_path (current_user.image, only_path: true), это дает мне вывод вроде:

"/rails/blobs/%23%3CActiveStorage::Attached::One:0x007f991c7b41b8%3E"

но это не URL, верно?Я не могу нажать и получить изображение в браузере.

3) url_for ----

undefined method `active_storage_attachment_url' for #<Api::V1::UsersController:0x007f991c1eaa98

Ответы [ 4 ]

0 голосов
/ 13 марта 2019

Иногда, например, API должен возвращать полный URL с хостом / протоколом для клиентов (например, мобильных телефонов и т. Д.).В этом случае передача параметра хоста всем вызовам rails_blob_url является повторяющейся, а не DRY.Даже для того, чтобы он работал, вам могут потребоваться другие настройки в dev / test / prod.

Если вы используете ActionMailer и уже настроили этот хост / протокол в среде / *. Rb, вы можете повторно использовать эту настройку с помощьюrails_blob_url или rails_representation_url.

# in your config/environments/*.rb you might be already configuring ActionMailer
config.action_mailer.default_url_options = { host: 'www.my-site.com', protocol: 'https' }

Я бы порекомендовал просто вызывать полные Rails.application.url_helpers.rails_blob_url вместо сброса как минимум 50 методов в ваш класс модели (в зависимости от вашего rout.rb), когда вы тольконужно 2.

class MyModel < ApplicationModel
  has_one_attached :logo

  # linking to a variant full url
  def logo_medium_variant_url
    variant = logo.variant(resize: "1600x200>")   
    Rails.application.routes.url_helpers.rails_representation_url(
      variant, 
      Rails.application.config.action_mailer.default_url_options
    )
   end

  # linking to a original blob full url
  def logo_blob_url
    Rails.application.routes.url_helpers.rails_blob_url(
      logo.blob, 
      Rails.application.config.action_mailer.default_url_options
    )
  end
end

0 голосов
/ 21 мая 2018

Мне удалось просмотреть изображение в браузере, используя следующее:

<%= link_to image_tag(upload.variant(resize: "100x100")), upload %>

Где upload - прикрепленное изображение.

0 голосов
/ 08 января 2019

Используйте метод rails_blob_path для вложений в контроллере и моделях

Например, если вам нужно назначить переменную (например, cover_url) в контроллере, сначала вы должны включить url_helpers ипосле использования метод rails_blob_path с некоторыми параметрами.Вы можете сделать то же самое в любой модели, работнике и т. Д.

Полный пример ниже:

class ApplicationController < ActionController::Base

  include Rails.application.routes.url_helpers

  def index
    @event = Event.first
    cover_url = rails_blob_path(@event.cover, disposition: "attachment", only_path: true)
  end

end
0 голосов
/ 19 мая 2018

Я не использовал rails active storage, но то, что я прочитал в документации, может помочь вам

Попробуйте rails_blob_url(model.image)

Подробнее http://edgeguides.rubyonrails.org/active_storage_overview.html

...