I want to select only specific attributes from a model(id,name).
The SQL-command can be for example:
SELECT id,name,username FROM Users
Do you know how I can handle this?
There's a :select option on find methods. This allows you to do:
User.find(:all, :select => 'id, name, username')
The returned objects will be User instances with those attributes available.
Or if you really want just the values without wrapping them us as User instances. You can add a method to User to return them.
def self.get_ids_and_names
self.connection.select_all("select id, name, username from users")
end
which will return an array of hashes mapping column name to the value for that row. E.g. [{'id' => 1, 'name' => 'user1', 'username' => 'username1'}, ... ]
User.select("id,name,username")You can also do
User.find(:all).map(&:id)
to get a list of the user ids if you are trying to get a list of user's ids or names
User.find(:all) returns a complete collection of ActiveRecord objects for each item. then with ruby it maps over those objects and returns just the IDs. You've still got that collection waiting to be garbage collected. hopefully your IDs aren't being used for other memory intensive actions. User.pluck and User.select are more efficient