0

有没有办法在回形针中定义样式别名(相同的转换,相同的文件路径)?

# in the model
has_attached_file :image, {
  :styles => {
    :thumb => "90x90>",
    :small => :thumb
  }
  [...]
}

# in the application
model.image.url(:thumb)
=> 'path/to/image/thumb.jpg'

model.image.url(:small)
=> 'path/to/image/thumb.jpg'

我目前正在重构一个有很多重复样式的应用程序。我希望它定义一次,而不破坏接口。

4

2 回答 2

3

这是要在初始化程序中添加的补丁:

module Paperclip
  Options.class_eval do
    attr_accessor :aliases

    def initialize_with_alias(attachment, hash)
      @aliases = hash[:aliases] || {}
      initialize_without_alias(attachment, hash)
    end

    alias_method_chain :initialize, :alias
  end

  Attachment.class_eval do
    def url_with_patch(style_name = default_style, use_timestamp = @options.use_timestamp)
      style_name = @options.aliases[style_name.to_sym] if @options.aliases[style_name.to_sym]
      url_without_patch(style_name, use_timestamp)
    end

    alias_method_chain :url, :patch
  end
end

以这种方式使用它:

has_attached_file :image, {
  :styles => {
    :thumb => "90x90>"
  }
  :aliases => { :small => :thumb }
}
于 2012-08-31T19:14:31.280 回答
0

我对apneadiving代码进行了一些更改以在version 中运行~ 4

module Paperclip
  Attachment.class_eval do
    def url_with_filter_aliases(style_name = default_style, options = {})
      style_name = find_alias(style_name) if find_alias(style_name).present?
      url_without_filter_aliases(style_name, options)
    end

    alias_method_chain :url, :filter_aliases

    private

    def find_alias(style_name)
      return if @options.blank?

      @options.dig(:aliases, style_name)
    end
  end
end

以同样的方式使用它:

has_attached_file :image, {
  :styles => {
    :thumb => "90x90>"
  }
  :aliases => { :small => :thumb }
}
于 2018-10-14T10:49:17.293 回答