我已经设置了我的模型来使用多态的图像模型。这个工作得很好,但是我想知道是否可能为每个模型更改:styles设置。找到一些使用STI(Model < Image)的示例, 但这对我不是一个选项,因为我正在使用has_many关系。
Art
has_many :images, :as => :imageable
图片
belongs_to :imageable, :polymorphic => true
has_attached_file :file, :styles => { :thumb => "150x150>", :normal => "492x600>"}
#Change this setting depending on model
更新
我尝试在Proc方法内启动调试器。只有与附加文件相关的字段被填充:
run'irb(Image):006:0> a.instance => #<Image id: nil, created_at: nil, updated_at: nil, imageable_id: nil, imageable_type: nil, file_file_name: "IMG_9834.JPG", file_content_type: "image/jpeg", file_file_size: 151326, file_updated_at: "2010-10-30 08:40:23">
这是来自ImageController#create的对象
ImageController#create
@image => #<Image id: nil, created_at: nil, updated_at: nil, imageable_id: 83, imageable_type: "Art", file_file_name: "IMG_9834.JPG", file_content_type: "image/jpeg", file_file_size: 151326, file_updated_at: "2010-10-30 08:32:49">
我正在使用Paperclip(2.3.5)和Rails 3.0.1。无论我做什么,a.instance对象都只有与附件相关的字段填充。有任何想法吗?
更新2
在阅读了很多关于Paperclip论坛的内容后,我不认为在保存实例之前可以访问它是可能的。您只能查看Paperclip的内容,仅此而已。
我通过在Image控制器中使用before过滤器预先保存了不带附件的图像来解决了这个问题。
before_filter :presave_image, :only => :create
...
private
def presave_image
if @image.id.nil? # Save if new record / Arts controller sets @image
@image = Image.new(:imageable_type => params[:image][:imageable_type], :imageable_id => params[:image][:imageable_id])
@image.save(:validate => false)
@image.file = params[:file] # Set to params[:image][:file] if you edit an image.
end
end