Решение, которое вы предлагаете, является правильным решением. Я также рекомендовал бы изменить ваш код на:
named_scope :clients, lambda { { :conditions => ['roles_users.role_id = ?', Role.named('client').id } }
Альтернативой может быть:
named_scope :clients, :joins => :role, :conditions => ['roles.name = ?', 'client']
Вы также можете подумать о выполнении:
named_scope :with_role, lambda { |r| { :conditions => ['roles_users.role_id = ?', r.id] } }
Или даже (для дополнительных очков)
Role.find_by_name('client').users
В любом случае, я надеюсь, что это поможет.