# RE: Problem using rmagick in model class

**URL:** <https://www.ruby-forum.com/t/re-problem-using-rmagick-in-model-class/99719>\
**Category:** Rails\
**Created:** [December 13, 2005, 6:15am UTC](https://www.ruby-forum.com/t/re-problem-using-rmagick-in-model-class/99719 "2005-12-13T06:15:16Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![tomfakes](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/87869e/32.png) [@tomfakes](https://www.ruby-forum.com/u/tomfakes)\
**Post date:** [December 13, 2005, 6:15am UTC](https://www.ruby-forum.com/t/re-problem-using-rmagick-in-model-class/99719/1 "2005-12-13T06:15:16Z")

</div>

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:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)]  
Sent: Monday, December 12, 2005 9:00 PM  
To: removed\_email\_address@domain.invalid  
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. \< removed\_email\_address@domain.invalid [mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) \>  
wrote:

Move the ‘require\_gem “rmagick”’ line outside the class definition for  
Registrant

require\_gem ‘rmagick’  
class Registrant \< ActiveRecord::Base  
…

* * *

From: David R. [[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)]  
Sent: Monday, December 12, 2005 10:04 AM  
To: removed\_email\_address@domain.invalid  
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.

---

<div class="post-metadata">

**Author:** ![tomfakes](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/87869e/32.png) [@tomfakes](https://www.ruby-forum.com/u/tomfakes)\
**Post date:** [December 13, 2005, 10:34pm UTC](https://www.ruby-forum.com/t/re-problem-using-rmagick-in-model-class/99719/2 "2005-12-13T22:34:52Z")

</div>

Ara, your suggestion to preface the call with :: worked perfectly.

I’m gonna stab in the dark and assume my use of file\_column elsewhere in  
the  
model may be to blame.

Thanks  
David R.

On 12/13/05, removed\_email\_address@domain.invalid [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> > your controller code that works.
> 
> Rails mailing list  
> removed\_email\_address@domain.invalid  
> [http://lists.rubyonrails.org/mailman/listinfo/rails](http://lists.rubyonrails.org/mailman/listinfo/rails)

–  
David R.  
Webmaster, SXSW Conferences and Festivals  
SXSW 2005 - March 11-20, 2005 - Austin, Texas

> **[SXSW Conference & Festivals](https://www.sxsw.com/)**
>
> Celebrate the convergence of the tech, film, and music industries at SXSW 2024 from March 8-16 in Austin, Texas.

---

<div class="post-metadata">

**Author:** ![tomfakes](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/87869e/32.png) [@tomfakes](https://www.ruby-forum.com/u/tomfakes)\
**Post date:** [December 13, 2005, 8:06am UTC](https://www.ruby-forum.com/t/re-problem-using-rmagick-in-model-class/99719/3 "2005-12-13T08:06:29Z")

</div>

On Mon, 12 Dec 2005, Tom F. wrote:

> 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.

‘require’ cares not where it’s called from. try prefacing the ‘Magick’  
constant with ‘::’ to make sure you are refering to the top-level Magick  
module. in general you should always do this since:

harp:~ \> cat a.rb  
class Foo; end

class Bar  
p Foo # gets top level foo  
end

class FooBar  
Foo = 42  
p Foo  
p ::Foo # gets top level foo  
end

harp:~ \> ruby a.rb  
Foo  
42  
Foo

rails does some voodoo with const\_missing that may have caused your  
referencing  
it to define one in your model - or perhaps you have another Magick  
const  
defined somewhere else in your code, since the code is your model now  
this  
should be quite easy to test.

regards.

-a
