Ошибки при использовании "скрепки" - PullRequest
0 голосов
/ 27 августа 2018

Я использую драгоценный камень "скрепка" и не могу понять, как правильно его использовать. Все время есть какие-то ошибки.

[ab5aaf0e-3255-49d7-bc59-233aced581f3] NoMethodError (неопределенный метод '+' для nil: NilClass):

[ab5aaf0e-3255-49d7-bc59-233aced581f3] app / models / photo.rb: 11: в 'as_json'

[ab5aaf0e-3255-49d7-bc59-233aced581f3] app / controllers / photos_controller.rb: 8: в `index '

Что я сделал не так?

Контроллер:

class PhotosController < ApplicationController

  def index
    @photos = Photo.all

    render json: @photos
  end

  private

  def photo_params
    params.permit(
      :users_id, 
      :photo
    )
  end

end

Модель:

class Photo < ActiveRecord::Base
  self.primary_key = "users_id"

  has_attached_file :photo, styles: {default: "150x150>"}, default_url: "/images/empty_photo.png", preserve_files: false
  validates_attachment_content_type :photo, content_type: ["image/jpg", "image/jpeg", "image/png"]

  def as_json(options={})
    super(options).merge({users_id: users_id,
                          photo: {
                            default_url: ENV['root_url'] + photo.url(:default),
                              original_url: ENV['root_url']+photo.url,
                          },
                        })
  end

  def image_from_url(url)
    self.photo = URI.parse(url)
  end


  def reprocess_image
    photo.reprocess!
  end

end

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

Ошибка говорит о том, что либо ENV['root_url'], либо photo.url(:default) равны нулю. И я полагаю, что это переменная ENV.

Лично я бы использовал представление для генерации ответа json, а не метод as_json, поскольку модели не имеют доступа к текущему запросу, но представления делают так, что вы можете сделать что-то вроде URI(request.url)+photo.url(:default)

#views/photos/index.json.jbuilder (I use Jbuilder for json templates)
json.array! @photos do |photo|
  json.l_users_id photo.l_users_id
  json.photo do
    json.default_url URI(request.url)+photo.photo.url(:default)
    json.original_url URI(request.url)+photo.photo.url
  end
end
0 голосов
/ 27 августа 2018

Проблема возникает из-за того, что ENV['root_url'] возвращает nil.

Попробуйте заменить ENV['root_url'] с Rails.application.routes.url_helpers.root_url

...