attachment_fu and acts_as_list - a land war in Asia


I'm trying to get a list of attachment_fu objects (type of
ProductImage) to play well with acts_as_list. Essentially, a single
Product can have multiple ProductImages arranged in a sorted list
(which feeds into a slideshow, ultimately).

If it wasn't clear from the title, this isn't going well. The problem
is in how attachment_fu adds multiple records to the database (one for
the main image and one for each thumbnail). I've been trying various
scoping options to get this to work, but to no avail. Here is my
latest try, which I had high expectations for:

acts_as_list :scope => 'product_id = #{product_id} and parent_id is

The error I get back is this:

Mysql::Error: You have an error in your SQL syntax; check the manual
that corresponds to your MySQL server version for the right syntax to
use near 'and parent_id is null) ORDER BY position DESC LIMIT 1' at
line 1: SELECT * FROM `product_images` WHERE (product_id = and
parent_id is null) ORDER BY position DESC LIMIT 1

So, somewhere along the road I'm trying to retrieve things from the
database, but passing in a null product_id.

Does anyone know how to bring attachment_fu and acts_as_list together
as friends?

Thanks in advance.


Got it!

This was a tricky one. I'll post the solution here since I've seen
some other posts where people got unsatisfactory results. I'm pleased
with how this came out. Here is my ProductImage class, in its

class ProductImage < ActiveRecord::Base

  belongs_to :product


  has_attachment :content_type => :image,
                 :storage => :file_system,
                 :max_size => 500.kilobytes,
                 :resize_to => '480!x360!',
                 :thumbnails => {
                   :medium => '247!x185!',
                   :small => '80!x60!',
                   :micro => '44!x33!'


  def scope_condition
   product_condition = product_id.nil? ? "product_id is null" :
"product_id = #{product_id}"
    product_condition + " and parent_id is null"

The magic is in the scope_condition method that sensibly handles when
we don't have a product_id (i.e., on the thumbnails that are getting
ripped out).


This is nice but I've done a little different...I created one class
for the image and another for the thumbnails. For this solution you
need to add :thumbnail_class => Thumbnail in the thumbnails hash and
define the scope_condition in the easy way (and a has_many association