动态Paperclip选项哈希

时间:2013-10-15 22:27:26

标签: ruby-on-rails paperclip

如何在下面的代码中动态传递选项哈希?

class Resource < ActiveRecord::Base
    belongs_to :attachable, :polymorphic => true

    has_attached_file :attachment #, paperclip_options from attachable

end


class ItemTypeOne < ActiveRecord::Base
    has_many :resources, :as => :attachable, :dependent => :destroy

    def paperclip_options
        ITEM_TYPE_ONE_OPTIONS
    end
end

class ItemTypeTwo < ActiveRecord::Base
    has_many :resources, :as => :attachable, :dependent => :destroy

    def paperclip_options
        ITEM_TYPE_TWO_OPTIONS
    end
end

我有两个不同的模型(在上面的代码中称为ItemTypeOne和ItemTypeTwo)。这两个型号具有完全不同的Paperclip存储选项(样式,路径等)

2 个答案:

答案 0 :(得分:0)

我认为它会像这样

class Resource < ActiveRecord::Base
    belongs_to :attachable, :polymorphic => true

    has_attached_file :attachment, attachment_options

    def attachment_options
      attachable.paperclip_options
    end
end

我正在运行,并没有测试此代码。如果有帮助,请告诉我。

您可能需要编写一个类方法,在多态关系中检查对象的类型,然后根据该类型传递选项

答案 1 :(得分:0)

我不确定你现在能做些什么。

问题是has_attached_file正在Resource 的上下文中执行。并且班级不知道在任何给定时间将有哪种类型的attachable未来实例。

为此,该调用需要获取并存储lambda(或方法名称),然后在给定实例的上下文中对其进行评估(或调用方法)并使用调用返回的选项。只有这样才能有不同的选择,具体取决于关系的具体类型。

据我所知,paperclip没有此功能。