AR Query returning a relation instead of the expected object type (model person)
Queries returnin开发者_JAVA技巧g different object types based on using limit() or first
This example uses limit(1) and does not produce the expected object type:
c = PersonCategory.where("category = ?", "Crown").limit(1) ##
=> PersonCategory Load (0.3ms) SELECT `person_categories`.* FROM `person_categories` WHERE (category = 'Crown') LIMIT 1
=> [#<PersonCategory id: 1, category: "Crown">] #####
c.class
=> ActiveRecord::Relation
This example uses first and gives the desired output:
c = PersonCategory.where("category = ?", "Crown").first ##
=> PersonCategory Load (0.4ms) SELECT `person_categories`.* FROM `person_categories` WHERE (category = 'Crown') LIMIT 1
=> #<PersonCategory id: 1, category: "Crown">
c.class
=> PersonCategory(id: integer, category: string) #####
ruby-1.9.2-p180 :034 >
limit returns a limited set of results. In your case, it returns what is essentially an array of PersonCategory objects, even if you only specify one object with limit(1).
For instance, calling PersonCategory.limit(15) would return the first 15 PersonCategory items in your database.
first, on the other hand, only returns the first result of it's preceding query - not an array of results. That's why you would see an individual PersonCategory object being returned.
加载中,请稍侯......
精彩评论