Скрепка на уроке - PullRequest
       2

Скрепка на уроке

0 голосов
/ 27 января 2011

Я хотел бы использовать papaerclip в Rails 3 для модели, которая не унаследована от 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

Скрепка не нравится:метод has_attached_file не смешивается с: NoMethodError: undefined method 'has_attached_file' for ThemeSettings:Class.Как я могу убедить Paperclip любить простые классы?Спасибо за вашу помощь!

Ответы [ 2 ]

4 голосов
/ 27 января 2011

Намного проще унаследовать от 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 голосов
/ 27 января 2011

Не проверено, но теоретически это должно работать:

require 'paperclip'

class ThemeSettings
  include ActiveModel::Validations
  include Paperclip

  has_attached_file # ...

  # ...
 end

требует скрепку, а затем включает модуль в свой класс.

...