Compatibility with legacy data requires me to use a
:finder_sql
It appears that when the finder_sql is used however, the normal
methods you can call on associations are broken.
A controller requires a limit of 3 items from an association,
attempting to use #all(:limit => 3) causes the issue below.
For now, I've worked around this by treating the association as
an Enumerable and use #take(3) instead.
class Company < ActiveRecord::Base
has_many :stats, :finder_sql => 'SELECT from_table.*
FROM gs_info from_table, gs_link link
WHERE link.id_2 = \'#{id}\' AND link.link_type IN (\'S\')
AND link.id_1 = from_table.e_id',
:class_name => 'GsInfo'
end
>> Company.find(51).stats.all(:limit => 3)
ActiveRecord::StatementInvalid: Mysql::Error: Operand should contain 1 column(s): SELECT * FROM `gs_info` WHERE (SELECT from_table.*
FROM gs_info from_table, gs_link link
WHERE link.id_2 = '51' AND link.link_type IN ('S')
AND link.id_1 = from_table.e_id) LIMIT 3
from /Volumes/RAID/projects/12/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb:219:in `log'
from /Volumes/RAID/projects/12/vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb:323:in `execute'
from /Volumes/RAID/projects/12/vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb:608:in `select'
from /Volumes/RAID/projects/12/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb:7:in `select_all_without_query_cache'
from /Volumes/RAID/projects/12/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract/query_cache.rb:62:in `select_all'
from /Volumes/RAID/projects/12/vendor/rails/activerecord/lib/active_record/base.rb:661:in `find_by_sql'
from /Volumes/RAID/projects/12/vendor/rails/activerecord/lib/active_record/base.rb:1548:in `find_every'
from /Volumes/RAID/projects/12/vendor/rails/activerecord/lib/active_record/base.rb:615:in `find'
from /Volumes/RAID/projects/12/vendor/rails/activerecord/lib/active_record/base.rb:635:in `all'
from /Volumes/RAID/projects/12/vendor/rails/activerecord/lib/active_record/associations/association_collection.rb:380:in `send'
from /Volumes/RAID/projects/12/vendor/rails/activerecord/lib/active_record/associations/association_collection.rb:380:in `method_missing_without_paginate'
from /Volumes/RAID/projects/12/vendor/rails/activerecord/lib/active_record/base.rb:2143:in `with_scope'
from /Volumes/RAID/projects/12/vendor/rails/activerecord/lib/active_record/associations/association_proxy.rb:206:in `send'
from /Volumes/RAID/projects/12/vendor/rails/activerecord/lib/active_record/associations/association_proxy.rb:206:in `with_scope'
from /Volumes/RAID/projects/12/vendor/rails/activerecord/lib/active_record/associations/association_collection.rb:376:in `method_missing_without_paginate'
from /opt/local/lib/ruby/gems/1.8/gems/mislav-will_paginate-2.3.11/lib/will_paginate/finder.rb:170:in `method_missing'
from (irb):11
from :0