Dynamic Finders and :finder_sql

In order to handle the access rights in my application (where users
only have access to designs within their own group and belonging to a
customer that they are associated with), I have the following has_many
association in the User model:

has_many :designs,
:finder_sql => ‘SELECT DISTINCT designs.* FROM designs INNER JOIN
(users, groups_users) ON designs.user_id = users.id AND
groups_users.user_id = users.id WHERE (groups_users.group_id IN
(SELECT resources.id FROM resources INNER JOIN (groups_users) ON
groups_users.group_id = resources.id WHERE groups_users.user_id =
#{id}) AND designs.customer_id IN (SELECT companies.id FROM companies
INNER JOIN (customers_users) ON customers_users.customer_id =
companies.id WHERE customers_users.user_id = #{id}))’,
:counter_sql => ‘SELECT COUNT() FROM (SELECT DISTINCT designs.
FROM designs INNER JOIN (users, groups_users) ON designs.user_id =
users.id AND groups_users.user_id = users.id WHERE
(groups_users.group_id IN (SELECT resources.id FROM resources INNER
JOIN (groups_users) ON groups_users.group_id = resources.id WHERE
groups_users.user_id = #{id}) AND designs.customer_id IN (SELECT
companies.id FROM companies INNER JOIN (customers_users) ON
customers_users.customer_id = companies.id WHERE
customers_users.user_id = #{id}))) AS d’

The association works fine when used in the following simple cases:

user.designs
user.designs.count
user.designs.find(1)

However it does not support any of the dynamic finders:

user.designs.find(:first)
user.designs.find(:all)
user.designs.find_by_reference(‘S’)

The problem is entirely down to the SQL that Rails itself injects into
my custom finder_sql; the main culprit being the addition of the
following:

SELECT * FROM designs WHERE (

This is appended to the beginning of my statement thereby rendering it
invalid.

Is there anyway to modify Rails’ behaviour in this situation so that
it only adds its conditions to the end of my existing finder_sql? Or
perhaps there is something inherently wrong with the format of my
otherwise-working finder_sql which is causing Rails to append the
SELECT?

Here is a sample query generated by Rails when performing
user.designs.find_by_reference(“REF”):

SELECT * FROM designs WHERE (SELECT * FROM designs INNER JOIN (users,
groups_users) ON designs.user_id = users.id AND groups_users.user_id =
users.id WHERE (groups_users.group_id IN (SELECT resources.id FROM
resources INNER JOIN (groups_users) ON groups_users.group_id =
resources.id WHERE groups_users.user_id = 1) AND designs.customer_id
IN (SELECT companies.id FROM companies INNER JOIN (customers_users) ON
customers_users.customer_id = companies.id WHERE
customers_users.user_id = 1))) AND (designs.reference = ‘REF’)
LIMIT 1

Thanks in advance,

– Paul