【问题标题】:Errors when using "paperclip"使用“回形针”时的错误
【发布时间】:2018-08-27 10:27:22
【问题描述】:

我使用 gem “回形针”,但我不知道如何正确使用它。一直都有一些错误。

[ab5aaf0e-3255-49d7-bc59-233aced581f3] NoMethodError(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

【问题讨论】:

    标签: ruby-on-rails paperclip


    【解决方案1】:

    问题发生是因为ENV['root_url'] 返回nil

    尝试替换ENV['root_url'] Rails.application.routes.url_helpers.root_url

    【讨论】:

    • 要么我误解了该怎么做,要么根本不起作用
    • @user10254427 您是否仍然收到相同的异常或消息已更改?
    • 更改为:undefined method root_url for #&lt;Module:0x00007fc7b448c2d0&gt; Did you mean? roles_url
    • 在你的routes.rb你需要定义root,检查这个相关的答案stackoverflow.com/a/22742007/5746504
    【解决方案2】:

    错误提示 ENV['root_url']photo.url(:default) 为 nil。我想它是 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
    

    【讨论】:

      猜你喜欢
      • 2018-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-27
      • 1970-01-01
      相关资源
      最近更新 更多