I think that in the code that didn’t work, you were, in effect, creating
a class called Registrant::Magick::ImageList, because the require was
inside the class definition (this is how mixins do their magic).
However, it seems that doesn’t apply if you use require inside a
method inside a class - your controller code that works.
Either put the require outside the class or module, or inside a method
to get the behavior you want.
From: David R. [mailto:[email protected]]
Sent: Monday, December 12, 2005 9:00 PM
To: [email protected]
Subject: Re: [Rails] Problem using rmagick in model class
Doh.
So, it might be helpful if I understood why my previous code, where all
of this was in the controller, worked fine, even when the require_gem
statement was called within a class method. The controller method looked
like this:
def upload_image(*some_args)
require_gem ‘rmagick’
#do stuff with Magick::ImageList
end
On 12/12/05, Tom F. < [email protected] mailto:[email protected] >
wrote:
Move the ‘require_gem “rmagick”’ line outside the class definition for
Registrant
require_gem ‘rmagick’
class Registrant < ActiveRecord::Base
…
From: David R. [mailto:[email protected]]
Sent: Monday, December 12, 2005 10:04 AM
To: [email protected]
Subject: [Rails] Problem using rmagick in model class
I’m refactoring some code in order to conform to “the right way” of
doing things. That is, I’m moving my image-saving code from my
controller to my model. What worked fine in the controller class is not
working in the model class.
Currently, my code looks somewhat like this:
##############
class RegistrantsController < ApplicationController
def upload_image
@registrant = Registrant.find(session[:registrant_id])
if request.post?
if(params[:crop_params])
@registrant.save_image(params[:image_to_crop],
params[:crop_params])
redirect_to :action => :index
else
@registrant.image = params[:registrant][:image]
File.chmod(0644, @registrant.image)
end
end
end
end
class Registrant < ActiveRecord::Base
require_gem ‘rmagick’
def save_image(image_to_crop, crop_params)
img_base = RAILS_ROOT + "/public/images/registrants/"
img_file = self.id.to_s + ".jpg"
y, x, w, h = crop_params.split(',')
img = Magick::ImageList.new(image_to_crop) # this is throwing
“uninitialized constant ImageList”
img.crop!(x.to_i, y.to_i, w.to_i, h.to_i)
img.resize!(120, 120)
color_thumb = img.resize(32, 32)
grey_img = img.quantize(256, Magick::GRAYColorspace)
img.write(img_path + img_filename)
grey_img.write(img_base + 'greyscale/' + img_filename)
color_thumb.write(img_base + 'thumbnail/' + img_filename)
end
end
##############
Note the comment in there (# this is throwing “uninitialized constant
ImageList”)
Can anyone see what I’ve done wrong, or otherwise help out?
Thanks,
David R.