Forum: Ruby on Rails query pulling too many fields

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Debcfd8f3f533800e2711c704825f9c0?d=identicon&s=25 Scott Kulik (kuliksco)
on 2009-04-17 02:58
i'm a little confused here on what's happening.

i have two tables ITEMS and ITEM_TYPES

ITEMS (belongs_to :item_type)
id
name
item_type_id

ITEM_TYPES
id
name

here is my Item.rb model code for my query:

    find(:all,
         :select => 'items.name, item_types.name',
         :include => :item_type,
         :conditions => ['item_types.name = ? OR item_types.name = ? OR
item_types.name = ? OR item_types.name = ?', 'Material', 'Weapon',
'Armor', 'Accessory'],
         :order => 'items.name')

currently it is selecting all fields in the ITEM table and not using the
:select that i have entered.

if i comment out the :conditions parameter the :select works properly.
i'm sure it's something to do with the linking to the item_types table.
does anyone know how i can get the above :select working properly?

thanks!
53be54e5db4dc58e4980db5a8255621b?d=identicon&s=25 Harold (Guest)
on 2009-04-17 03:31
(Received via mailing list)
The find's :select option is ignored when you combine it with
the :include option.

On Apr 16, 8:58 pm, Scott Kulik <rails-mailing-l...@andreas-s.net>
Debcfd8f3f533800e2711c704825f9c0?d=identicon&s=25 Scott Kulik (kuliksco)
on 2009-04-17 03:49
Harold wrote:
> The find's :select option is ignored when you combine it with
> the :include option.
>
> On Apr 16, 8:58�pm, Scott Kulik <rails-mailing-l...@andreas-s.net>

thanks.  i removed the include and did my joins manually.  i guess
that's probably the best way:

    find(:all,
         :select => 'item_types.name, items.id, items.name',
         :joins => 'join item_types on items.item_type_id =
item_types.id',
         :conditions => ['item_types.name = ? OR item_types.name = ? OR
item_types.name = ? OR item_types.name = ?', 'Material', 'Weapon',
'Armor', 'Accessory'],
         :order => 'items.name')
6883e5ef03484d4fcef507d7b4f1d243?d=identicon&s=25 Matt Jones (Guest)
on 2009-04-18 23:36
(Received via mailing list)
The whole operation smells like a somewhat premature operation, unless
either Item or ItemType has a whole bunch of fields you didn't
mention. Why not just let AR work the way it does?

Item.find(:all, :include => :item_type, :conditions =>
{ :'item_types.name' => %w(Material Weapon Armor Accessory) })

(that last bit changes the chain of 'OR's above into an IN statement,
which is a cheap optimization, and easier to change later...)

--Matt Jones


On Apr 16, 9:49 pm, Scott Kulik <rails-mailing-l...@andreas-s.net>
This topic is locked and can not be replied to.