私のRailsコントローラのアクティブストレージに保存されているhas_oneモデルの添付ファイルのURLを取得するにはどうすればよいですか。そのため、jsonのAPIとしてフルリンクとして送信できます。これまでのところ、以下の方法を試しましたが、それぞれがさまざまな問題を引き起こしています:
1)current_user.image.service_url ----未定義のメソッド `service_url 'for#
2)Rails.application.routes.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
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
時々、例えばAPIは、クライアント(携帯電話など)のホスト/プロトコルを含む完全なURLを返す必要があります。この場合、HostsパラメーターをすべてのRails_blob_url呼び出しに渡すことは反復的であり、DRYではありません。それでも、動作させるためにdev/test/prodで異なる設定が必要になる場合があります。
ActionMailerを使用しており、environments/*。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' }
2つだけが必要な場合は、少なくとも50のメソッドをモデルクラス(routes.rbに応じて)にダンプするのではなく、完全なRails.application.url_helpers.Rails_blob_url
を呼び出すことをお勧めします。
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
私はRailsアクティブストレージを使用していませんでしたが、ドキュメントで読んだことがこれがあなたを助けるかもしれません
Rails_blob_url(model.image)
をお試しください
詳細 http://edgeguides.rubyonrails.org/active_storage_overview.html
以下を使用してブラウザで画像を表示することができました。
<%= link_to image_tag(upload.variant(resize: "100x100")), upload %>
ここで、upload
は添付イメージです。