Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

RailsのControllerで画像のprefix付きパスを取得する

More than 3 years have passed since last update.

Rails の Controller から render json で画像ファイルパスをJSONで返すアクションを作ろうとしました。
画像ファイルパスは下記の構成のテーブルの filename カラムに格納されています。

migration.rb
create_table :images do |t|
  t.string :filename
  t.timestamps
end

そして下記の Controller を作り、画像パスを image_path で取得し render しようとしました。

controller.rb
@images = Image.all
@images = @images.map do |image|
  image.filename = image_path(image.filename)
  image
end
render json: @images

しかし View と Controller とでは image_path の挙動が違うらしく、 Controller では画像ファイル名に prefix が付かないみたいです。

これについては下記のサイトで「完全にバグとしか言えない」と言われております。
Rails image_pathの動作が違う

上記サイトには解決方が載っておりますが、自分は上手く行きませんでした...。

ですが、下記のように image_path の代わりに ActionView::Base.new.image_path を使うことで、画像ファイル名に prefix が付いたパスを取得することが出来ました。

@images = Image.all
@images = @images.map do |image|
  view_context = ActionView::Base.new
  image.filename = view_context.image_path(image.filename)
  image
end
render json: @images

因みに view で正常に動作するなら jbuilder を使えば良いのでは?ということについては自分も考えて試しましたが、何故か Controller と同じ動作をしてしまい上手く行かなかったです。

yakimeron
株式会社テックコネクト代表取締役兼エンジニアです。Scala/Swift/Kotlin/C#/Java/C++/Go/Ruby/PHP/Python/JavaScriptを書き、AWS/Firebaseを使います。現在はUnity+Go+Nuxt.js+AWS+Firebase+PhotonEngineを利用してVRサービスを開発しています。コードを書いて物を作り出すのが何よりも好き!!
https://techconnect.co.jp/
techconnect
仮想世界の未来を創る VR SNS「TECO」を開発しています!日本のxR業界の発展に少しでも貢献できればと思い立ち上げました。
https://techconnect.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away