41572


いつもお世話になっております。  
現在、Ruby on Rails(5.0.6)にて、iOSアプリとServer間のAPI機能を提供する実装をしております。  
assets内にある画像ファイルのURLをAPI経由で返却したいと思っております。

ディレクトリ構成は下記です。  
assets  
|- images  
|- image1.png  
|- image2.png

ここで、 `asset_url`
を使って、assets内のURLを取得したいと思っているのですが、controllerで使った場合と、viewで使った場合で、URLの挙動が違うようで、困っております。

下記がコードになります。

test_controller.rb

[code]

    class TestController
      include ActionView::Helpers::AssetUrlHelper
    
      def index
        @image = asset_url('image1')
      end
    end
    
[/code]

index.json.jbuilder

[code]

    json.image1 @image
    json.image2 asset_url('image1')
    
[/code]

こちらで実行をした際に、下記のような結果となりました。

[code]

    {
      "image1"=>"http://www.example.com/image1", 
      "image2"=>"http://www.example.com/assets/image1-xxxx.png"
    }
    
[/code]

viewの方に設定したものをブラウザで確認すると、正常に画像が表示されるのですが、controllerで設定されたURLだと画像が確認出来ません。

これをcontrollerでもちゃんとアセットパイプラインに乗った形で表示をさせる方法をご存知の方がいらっしゃいましたら、ご教授頂けますと幸いでございます。

よろしくお願いいたします。


CC BY-SA 3.0
2018-02-08T03:01:46.840
41560
2018-02-08T06:42:34.847
8755
question
ruby-on-rails
Ruby on Rails5の asset_url の挙動について


コントローラーを次のように変更してみてください。

[code]

    class TopController < ApplicationController
      def index
        @image = helpers.asset_url('image1')
      end
    end
    
[/code]

rails5はコントローラー内でViewヘルパーを簡単に使用できるように`helpers`メソッドが定義されています。

View用のHelperはViewContextの有無によって挙動が違ったと思います。（要するに単にincludeするだけでは、Viewの中で使用しているかのような使い方はできないということ）


CC BY-SA 3.0
2018-02-08T06:37:19.330
41572
2018-02-08T06:42:34.847
2018-02-08T06:42:34.847
9608
9608
41560
answer