ruby-on-railsruby-on-rails-5spreeruby-on-rails-6solidus

Adding Paperclip Attachment to Spree Orders Table,


I am working on an ecommerce website using Solidus, Rails. The site allows you to order photo frames & prints from a variety of options. To print a photo a user must upload the jpg file of the photo. So, to allow that I modified the orders table and added a paperclip attachment called 'attachment'

I ran the following command

rails generate paperclip SpreeOrder attachment

Which generated the migrations, then I ran rake db:migrate

Then I created a spree/order_decorator.rb file, and added has_attached_file

 module Spree::OrderDecorator
  has_attached_file :attachment, styles: {
      :medium => {
          :geometry => "640x480",
          :format => 'jpeg'
      },
      :thumb => { :geometry => "160x120", :format => 'jpeg', :time => 10}
  }, :processors => [:transcoder]

  validates_attachment_content_type :attachment, content_type: /\Aimage\/.*\z/

  Spree::Order.prepend self
end

After this I ran the server, and ended up getting this error

 undefined method `has_attached_file' for Spree::OrderDecorator:Module (NoMethodError)

I have configured solidus for use with paperclip only, so I am really confused as to why I am getting this error, even later I manually went and generated a paperclip.rb file in the config/initializers directory, but still I get the same error.

Please help with this!! Thank You!!


Solution

  • You should add those paperclip method at class level in the prepended module:

    def self.prepended(base)
      base.has_attached_file 
    end