ruby-on-rails – 在Paperclip中动态使用:default_url

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 在Paperclip中动态使用:default_url前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试配置Paperclip以根据实例的category属性提供不同的丢失图像.对象的每个类别都有自己缺少的图像.

这是我第一次服用

编辑添加完整型号:

class Service < ActiveRecord::Base

  attr_accessible :logo,:logo_file_name,:logo_content_type,:logo_file_size,:logo_updated_at

  belongs_to :category,:counter_cache => true

  has_attached_file :logo,:path => "/:id-:style-:filename",:url  => ":s3_eu_url",:default_url => "/logos/:style/#{self.category.name]}.png",:styles => { :large => "600x400>",:medium => "300x200>",:small => "100x75>",:thumb => "60x42>" }
end

class Category < ActiveRecord::Base
  attr_accessible nil

  has_many :services
end

在我看来,image_tag service.logo.url(:thumb)输出

undefined method `category' for #<Class:0x0000010a731620>

有任何想法吗?

EDIT2:

一个工作的default_url是:default_url => “/logos/:style/missing.png”

解:

请看下面我自己的答案.

解决方法

我找到了一个解决方案,跟随 this gist和另外 question in stackoverflow.

我的工作解决方案:

Class Service

  has_attached_file :logo,:default_url => :set_default_url_on_category,:thumb => "60x42>" }

  private

  def set_default_url_on_category
    "/logos/:style/#{category.name}.png"
  end
end

还有一个初始化函数paperclip_default_url_fix.rb

module Paperclip
  module Interpolations
    def self.interpolate(pattern,*args)
      pattern = args.first.instance.send(pattern) if pattern.kind_of? Symbol

      all.reverse.inject(pattern.dup) do |result,tag|
        result.gsub(/:#{tag}/) do |match|
          send(tag,*args)
        end
      end
    end
  end
end

猜你在找的Ruby相关文章