如何获得回形针附件的完整绝对URL?

时间:2018-12-26 08:20:15

标签: ruby-on-rails ruby

我正在处理JSON数据,我想显示带有本地主机名的完整图像URL 但我得到了一半的item_image_url。.

“ item_image_url”:“ /system/images/item_images/000/000/001/original/images_%284%29.jpeg?1545807832”

f=partial(fall,x=dfxn)
print(f(df))

我怎么能得到这样的完整ulr  http://localhost:3000/system/images/item_images/000/000/001/original/images_%284%29.jpeg?1545807832

在控制器中

{
        "id": 1,
        "title": "Pasta",
        "filename": "Burger.",
        "item_image_file_name": "images_(4).jpeg",
        "item_image_content_type": "image/jpeg",
        "item_image_file_size": 12944,
        "item_image_updated_at": "2018-12-26T07:03:52.284Z",
        "updated_at": "2018-12-26T07:03:52.355Z",
        "created_at": "2018-12-26T07:03:52.355Z",
        "item_image_url": "/system/images/item_images/000/000/001/original/images_%284%29.jpeg?1545807832"
    }

在模型中

class V1::ImagesController < ApplicationController

    skip_before_action :verify_authenticity_token

    def index

         @images = Image.all


         render :json => @images.to_json(:methods => [:item_image_url])
    end

    def show
        image = Image.find(params[:id])
        render json: {status: 'success', data:image},status: :ok
    end


    def create
         image = Image.new(image_params)
        if  image.save
            render json: {status: 'success', data:image},status: :ok    
        else
            render json: {status: 'error', message:'image not saved', data:image.errors},status: :unprocessable_entity  
        end 
    end


    def destroy
        image = Image.find(params[:id])
        image.destory
        render json: {status: 'success', data:image},status: :ok    
    end

    private def image_params

        params.permit(:item_image_url,:title,:filename)

    end

end

请帮助。

3 个答案:

答案 0 :(得分:0)

根据此github issue,使用ActionController :: Base.asset_host会更干净,这样会产生帮助器:

  def add_host_prefix(url)
    URI.join(ActionController::Base.asset_host, url)
  end

这假设您在每个/ config / environments / 环境 .rb文件中具有以下内容:

Appname::Application.configure do

  # ....

  config.action_controller.asset_host = 'http://localhost:3000' # Locally

  # ....

end

希望有帮助

答案 1 :(得分:0)

APP_URL中将常量config/development.rb定义为

APP_URL = 'http://localhost:3000'

对于test.rbproduction.rb,您必须根据域环境设置进行设置。

并将其保存为

def item_image_abs_url
    "#{APP_URL}#{item_image.url(:original)}"
end

检查您在Rails控制台中获得的以下URL,

image = Image.first
image.item_image.url

答案 2 :(得分:0)

根据帖子中提到的描述,似乎您尚未在特定环境文件中指定资产宿主。

上述答案中定义的适当方法也是在相关的config / environments / {environment}文件中定义资产宿主: 上一行中提到的环境表示development.rb,production.rb和test.rb(如果您已定义了自定义环境,则也是如此)

onfig.action_controller.asset_host = "http://localhost:3000"

如果要在视图中访问它,请使用下面提到的代码:

asset_url(model.attachment.url(:style))

如果要访问它,请使用下面提到的代码

helper.asset_url(model.attachment.url(:style))

如果要在模型中使用它,请使用下面提到的代码:

ApplicationController.helpers.asset_url(model.attachment.url(:style))

希望有帮助!