有没有办法在回形针中定义样式别名(相同的转换,相同的文件路径)?
# 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'
我目前正在重构一个有很多重复样式的应用程序。我希望将它定义一次,同时不破坏界面。
答案 0 :(得分: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 }
}
答案 1 :(得分:0)
我对apneadiving代码进行了一些更改以在版本~ 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 }
}