我使用gem"回形针",我不知道如何正确使用它。一直有一些错误。
[ab5aaf0e-3255-49d7-bc59-233aceed581f3] NoMethodError (undefined 方法 '+' for nil:NilClass(:
[ab5aaf0e-3255-49d7-bc59-233aced581f3] app/models/photo.rb:11:in "as_json"
[ab5aaf0e-3255-49d7-bc59-233aced581f3] app/controllers/photos_controller.rb:8:in '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
发生此问题是因为ENV['root_url']
返回nil
。
尝试替换ENV['root_url']
与Rails.application.routes.url_helpers.root_url
错误显示ENV['root_url']
或photo.url(:default)
为零。我想这是ENV变量。
就个人而言,我会使用视图而不是as_json
方法来生成 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