能否在Paperclip中获取可用的照片样式?

5

我有几种不同的样式(大小),所以我希望在文本编辑器附近回显它们以供用户选择并在文本中使用。

为了做到这一点,我需要获取模型中定义的所有样式。我该如何做到这一点?(我需要自动化的方式,因为样式可能会更改)

  # Photo
  has_attached_file :photo, :styles => { 
    :sthumb => "150x150>",
    :crop => "200x200#",
    :thumb => "300x300>",
    :small => "500x500>", 
    :large => "900x900>",
    :xlarge => "2600x2600>"
    }, 
  :default_url => "missing.png",
  :url => "/items/:id/:style.:basename.:extension"
1个回答

9

不要直接将样式定义传递给has_attached_file方法,您可以将它们存储在一个常量中,并在显示样式列表时也使用它。

像这样:

# Photo
DEFINED_STYLES = { 
  :sthumb => "150x150>",
  :crop => "200x200#",
  :thumb => "300x300>",
  :small => "500x500>", 
  :large => "900x900>",
  :xlarge => "2600x2600>"
}

has_attached_file :photo, :styles => DEFINED_STYLES, 
  :default_url => "missing.png",
  :url => "/items/:id/:style.:basename.:extension"

然后你可以在视图中直接使用相同的常量,例如:

<%= Photo::DEFINED_STYLES.keys.map(&:to_s).join(", ") %>

另一种选择

此外,不需要定义常量,可以直接从模型实例中获取Paperclip样式:

Photo.new.photo.styles.keys
=> [:sthumb, :crop, :small, :large, :xlarge]

photo是在has_attached_file中使用的Paperclip附件的名称。


2
谢谢!完美运作!我决定使用Photo.new.photo.styles.keys,因为模型中定义的样式对我的代码来说是可以的 :) - Gediminas Šukys

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接