[eluser]Phil Sturgeon[/eluser]
You need to get the same number of fields being returned by each statement within the union. That means instead of using * use actual fieldnames and aliases to call them all the same thing.
Code:
( SELECT fieldA as first_thing, fieldB as second_thing FROM table1 )
UNION
( SELECT fieldX as first_thing, fieldY as second_thing FROM table2 )
And no there is no way to handle this with active record ;-)