fri*_*shi 7 forms ruby-on-rails paperclip
我有以下型号:
Post.rb
class Post < ActiveRecord::Base
belongs_to :category
has_many :attachments, :dependent => :destroy
has_many :citations, :dependent => :destroy
validates :title, :category_id, :content, :presence =>true
acts_as_taggable_on :keywords
accepts_nested_attributes_for :attachments, :allow_destroy => true,
:reject_if => proc { |attributes| attributes['photo'].blank?}
accepts_nested_attributes_for :citations, :allow_destroy=>true
end
Run Code Online (Sandbox Code Playgroud)
Attachment.rb
class Attachment < ActiveRecord::Base
belongs_to :post
has_attached_file :photo, :styles => { :medium => "637x471>",
:thumb => Proc.new { |instance| instance.resize },
:carousel => Proc.new { |instance| instance.decide_style }
},
:url => "/pictures/:style/:basename.:extension",
:path =>":rails_root/public/pictures/:style/:basename.:extension"
validates_attachment_content_type :photo, :content_type => ['image/png', 'image/jpg', 'image/jpeg']
validates_attachment_size :photo, :less_than => 2.megabytes
### End Paperclip ####
def decide_style
# catid = Post.find(param[:post_category_id])
# something here to get the selection from the form.
if(catid == 2)
# "400x800>" or custom style here
end
end
def resize
geo = Paperclip::Geometry.from_file(photo.to_file(:original))
ratio = geo.width/geo.height
min_width = 142
min_height = 119
if ratio > 1
# Horizontal Image
final_height = min_height
final_width = final_height * ratio
"#{final_width.round}x#{final_height.round}!"
else
# Vertical Image
final_width = min_width
final_height = final_width * ratio
"#{final_height.round}x#{final_width.round}!"
end
end
end
Run Code Online (Sandbox Code Playgroud)
我试图有条件地应用一种风格,基于从表格下拉菜单中做出的选择.我只是不确定应该选择哪种风格的决定在哪里实施.
思考?
仙人
Mat*_*ins 15
看起来你正试图将它建立category_id在Post模型的价值上,是吗?如果是这样,您实际上可以将lambda作为:styles附件选项中条目的值传递,其中包括附件作为属性.
has_attached_file :photo,
:styles => lambda { |attachment| {
:medium => "637x471>",
:thumb => attachment.instance.resize,
:carousel => attachment.instance.decide_style,
} },
:url => "/pictures/:style/:basename.:extension",
:path =>":rails_root/public/pictures/:style/:basename.:extension"
Run Code Online (Sandbox Code Playgroud)
该attachment是一个Paperclip::Attachment对象,并调用instance方法就可以返回你的模型实例.
然后在您的decide_style方法中,您可以根据category_id需要将其基于模型的值.
def decide_style
case category_id
when 1 then "200x400>"
when 2 then "400x800>"
else "50x50#"
end
end
Run Code Online (Sandbox Code Playgroud)