Как я могу получить полный абсолютный URL для прикрепления скрепки? - PullRequest
0 голосов
/ 26 декабря 2018

Я работаю с данными JSON, я хочу отобразить полный URL-адрес изображения с именем локального хоста, но получаю половину item_image_url ..

"item_image_url": "/ 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"
    }

как мне получить этот полный ulr как этот http://localhost:3000/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

в модели

class Image < ApplicationRecord

    has_attached_file :item_image, styles: { medium: "300x300>", thumb: "100x100>" }, default_url: "/images/:style/missing.png"
    validates_attachment_content_type :item_image, content_type: /\Aimage\/.*\z/


    def item_image_url
        self.item_image.url(:original)
    end

end

Просьбы нуждаются в помощи ..

Ответы [ 3 ]

0 голосов
/ 26 декабря 2018

Определить константу APP_URL в config/development.rb как,

APP_URL = 'http://localhost:3000'

Для test.rb & production.rb, необходимо установить в соответствии с настройкой среды вашего домена.

И получите это,

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

Проверьте следующий URL, который вы получите в консоли rails,

image = Image.first
image.item_image.url
0 голосов
/ 26 декабря 2018

В соответствии с описанием, упомянутым в посте, кажется, что вы не указали хост ресурса в конкретном файле среды.

Подходящим способом, как определено в ответе выше, также является определение хостов ресурса всоответствующий файл config / environment / {environment}: где среда, упомянутая в приведенной выше строке, означает development.rb, production.rb и test.rb (и другие, если вы определили пользовательскую среду)

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

Если вы хотите получить к нему доступ в виде, используйте код, указанный ниже:

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

Если вы хотите получить доступ к консоли rails, используйте код, указанный ниже

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

.чтобы использовать его в модели, используйте приведенный ниже код:

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

Надеюсь, это поможет !!

0 голосов
/ 26 декабря 2018

Согласно этой проблеме github , лучше использовать ActionController :: Base.asset_host, так что это приведет к появлению помощника:

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

Это предполагает, что у вас есть следующее в каждом/config/environments/environment.rb file:

Appname::Application.configure do

  # ....

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

  # ....

end

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...