3

我正在尝试在我的第一个 rails 应用程序中实现 Paperclip,而我碰巧将 rails 3 和 mongodb 与 mongomapper 一起使用。

我按照本指南了解如何让所有东西一起工作

正如博客文章所建议的那样,我已经将回形针放入 config/initializers 目录,我安装了 gem,gem 在 gemfile 中(rails 3 对),我运行了捆绑器。

在我的用户类中,我添加了

需要“回形针”

当我加载应用程序时,我收到以下错误,

用户:类的未定义方法“has_attached_file”

回形针文件看起来像这样

模块回形针
  模块类方法
    def has_attached_file name, options = {}
      包括 InstanceMethods

      write_inheritable_attribute(:attachment_definitions, {}) 如果 attachment_definitions.nil?
      attachment_definitions[name] = {:validations => []}.merge(options)

      after_save :save_attached_files
      before_destroy :destroy_attached_files

      定义回调:before_post_process,:after_post_process
      define_callbacks :"before_#{name}_post_process", :"after_#{name}_post_process"

      定义方法名 |*args|
        a = attachment_for(名称)
        (args.length > 0) ? a.to_s(args.first) :一个
      结尾

      define_method "#{name}=" 做 |file|
        attachment_for(name).assign(file)
      结尾

      定义方法“#{name}?” 做
        attachment_for(name).file?
      结尾

      validates_each 名称,:logic => lambda {
        附件 = attachment_for(名称)
        attachment.send(:flush_errors) 除非 attachment.valid?
      }
    结尾
  结尾

  模块插值
    # 处理字符串 id (mongo)
    def id_partition 附件,样式
      if (id = attachment.instance.id).is_a?(Integer)
        ("%09d" % id).scan(/\d{3}/).join("/")
      别的
        id.scan(/.{3}/).first(3).join("/")
      结尾
    结尾
  结尾
结尾

关于我可能做错了什么的任何建议?我的步骤正确吗?

4

4 回答 4

6

从 MongoMapper 0.11.0、Paperclip 2.5.2 和 Rails 3.0.4 开始,您只需要:

#your model
require 'paperclip'

class User
  include MongoMapper::Document
  include Paperclip::Glue

  has_attached_file :avatar

  key :avatar_file_name, String
end

您不再需要 Paperclip 初始化程序。

于 2012-02-06T07:52:30.420 回答
1

我刚刚发布了一个 gem 来解决这个问题,因为上面的代码片段对于以后版本的回形针和导轨不太适用。

查看mongomapper-paperclip

于 2012-08-16T18:52:13.813 回答
0

我想我得到了它的工作,但一些原始解决方案不适用于新发布的版本。此解决方案适用于 Rails 3.0.4、回形针 2.3.8 和 mongo_mapper 0.8.6:

模型:

# app/models/entry_image.rb
require 'paperclip'

class EntryImage
  include MongoMapper::Document
  include Paperclip::Glue

  has_attached_file :image, :styles => {:thumb => "25x25#"}

  key :image_file_name, String

end

初始化器

# config/initializers/mongo_paperclip.rb
# Code originally from 
# http://anlek.com/2010/06/getting-paperclip-to-work-with-mongomapper/
# Additional changes to work with newer version of paperclip
module Paperclip
  class << self
    def logger #:nodoc:
      MongoMapper.logger
    end
  end

  module ClassMethods
    def has_attached_file name, options = {}
      include InstanceMethods

      write_inheritable_attribute(:attachment_definitions, {}) if attachment_definitions.nil?
      attachment_definitions[name] = {:validations => []}.merge(options)

      after_save :save_attached_files
      before_destroy :destroy_attached_files

      define_callbacks :before_post_process, :after_post_process
      define_callbacks :"before_#{name}_post_process", :"after_#{name}_post_process"

      define_method name do |*args|
        a = attachment_for(name)
        (args.length > 0) ? a.to_s(args.first) : a
      end

      define_method "#{name}=" do |file|
        attachment_for(name).assign(file)
      end

      define_method "#{name}?" do
        attachment_for(name).file?
      end

      validates_each name, :logic => lambda {|record|
        attachment = record.attachment_for(name)
        attachment.send(:flush_errors)
      }
    end
  end

  module Interpolations
    # Handle string ids (mongo)
    def id_partition attachment, style
      if (id = attachment.instance.id).is_a?(Integer)
        ("%09d" % id).scan(/\d{3}/).join("/")
      else
        id.scan(/.{3}/).first(3).join("/")
      end
    end
  end
end
于 2011-03-16T20:41:39.230 回答
0

结果我两个都需要

 
    包括回形针
    需要“回形针”

在 user.rb 文件中。

这导致错误在哪里vald?未被识别,但我注释掉了

# 除非 attachement.valid?

现在情况正在好转。

于 2010-07-29T17:55:43.820 回答