2011-01-27 4 views
0

레일즈 3에서 papaerclip을 ActiveRecord :: Base에서 상속받지 않은 모델에서 사용하고 싶습니다. 다른 모델과 마찬가지로 모델을 저장할 필요가 없으며 일부 ActiveModel 믹싱 만 사용됩니다.클래스의 종이 클립

class ThemeSettings 
    include ActiveModel::Validations 

    validate :no_attachement_errors 
    has_attached_file :logo, 
        :styles => { :mini => '48x48>', :small => '100x100>', :normal => '240x240>', :large => '600x600>' }, 
        :default_style => :normal, 
        :url => "/assets/logos/:id/:style/:basename.:extension", 
        :path => ":rails_root/public/assets/logos/:id/:style/:basename.:extension" 

    def logo_file_name 
    .. 
    end 
    def logo_file_name=(file_name) 
    .. 
    end 
    def logo_content_type .. 
    def logo_content_type=(content_type) .. 
    def logo_file_size .. 
    def logo_file_size=(file_size) .. 
    def logo_updated_at .. 
    def logo_updated_at=(updated_at) .. 
end 

종이 클립 그렇게 좋아하지 않는다 :

나는 이런 식으로 뭔가를 만들어 NoMethodError: undefined method 'has_attached_file' for ThemeSettings:Class 다음 has_attached_file 방법은 혼합되지 않습니다. Paperclip을 어떻게 간단한 수업처럼 설득 할 수 있습니까? 당신의 도움을 주셔서 감사합니다!

답변

4

DB 테이블이없는 경우에도 ActiveRecord::Base에서 상속하는 것이 훨씬 간단합니다. 그런 식으로 모든 다른 보석은 완벽하게 작동합니다.

class ThemeSettings < ActiveRecord::Base 
    def self.columns 
    @columns ||= []; 
    end 

    def self.column(name, sql_type = nil, default = nil, null = true) 
    columns << ActiveRecord::ConnectionAdapters::Column.new(name.to_s, default, 
     sql_type.to_s, null) 
    end 

    # Override the save method to prevent exceptions. 
    def save(validate = true) 
    validate ? valid? : true 
    end 

    column :logo_file_name 
    column :logo_content_type 
    column :logo_file_size 
    column :logo_updated_at 
    # You can override the = methods here. 

    validate :no_attachement_errors 
    has_attached_file :logo, 
        :styles => { :mini => '48x48>', :small => '100x100>', :normal => '240x240>', :large => '600x600>' }, 
        :default_style => :normal, 
        :url => "/assets/logos/:id/:style/:basename.:extension", 
        :path => ":rails_root/public/assets/logos/:id/:style/:basename.:extension" 


end 
2

테스트하지,하지만 이론적으로이 작업을해야합니다 -이 방법에 대해 :

require 'paperclip' 

class ThemeSettings 
    include ActiveModel::Validations 
    include Paperclip 

    has_attached_file # ... 

    # ... 
end 

는 종이 클립을 요구 한 다음 클래스에 모듈을 포함한다.

+0

이것은 나를 위해 작동하지 않았다. – Tony