0

If I have an array of 100 objects of a class called Stream, like this:

User.find(1001).streams.find( :all, :order => "id", :limit => 100 )

which is basically a data table, how would I select a certain field, such as rating, from it? In SQL, all I need to do is, SELECT rating FROM streams WHERE user_id=1001 ORDER BY id LIMIT 100, but I don't know how to do that in Ruby on Rails. Using the command above returns all the fields, which I can't use.

4

1 に答える 1

1

Code below will return an array of rating

User.find(1001).streams.all( :order => "id", :limit => 100).map(&:rating) 

If you want to avoid the cost of retrieving all attributes of the User object:

User.find(1001).streams.all:select => "rating", 
  :order => "id", :limit => 100).map(&:rating) 

You can use the standard SELECT clause syntax in the value for the key :select.

If you want to avoid constructing User objects:

User.connection.select_values("select rating from users order by id limit 100")
于 2012-04-19T21:33:09.653 に答える