web-dev-qa-db-ja.com

Railsコントローラーのアクティブストレージに保存されている添付ファイルのURLを取得するにはどうすればよいですか?

私の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
8
Mobeen

コントローラとモデルのアタッチメントにはメソッド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
3
Jonatas Eduardo

時々、例えば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

3
stwienert

私はRailsアクティブストレージを使用していませんでしたが、ドキュメントで読んだことがこれがあなたを助けるかもしれません

Rails_blob_url(model.image)をお試しください

詳細 http://edgeguides.rubyonrails.org/active_storage_overview.html

2
Ravi Mariya

以下を使用してブラウザで画像を表示することができました。

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

ここで、uploadは添付イメージです。

0
safikabis