【发布时间】:2015-10-19 21:45:04
【问题描述】:
我有一个名为 Listing 的模型:
class Listing < ActiveRecord::Base
belongs_to :user
end
我想检索 100 个列表以及每个列表的用户作为列表哈希中的子哈希,所有这些都通过使用 ActiveRecord 的单个 SQL 调用。这就是我现在直接使用 PostgreSQL 的方式:
def listings
listings = ActiveRecord::Base.connection.execute("select row_to_json(t) as listing from (select *, row_to_json(users) as user from listings INNER JOIN users ON listings.user_id = users.id LIMIT 100) t")
render json: {listings:listings,listing_count:Listing.count}
end
没有循环列表来检索他们的用户,这非常耗时。 谢谢!
编辑
我按照建议尝试了这个,但它没有返回用户:
2.2.1 :012 > Listing.joins(:user).limit(1)
Listing Load (0.6ms) SELECT "listings".* FROM "listings" INNER JOIN "users" ON "users"."id" = "listings"."user_id" LIMIT 1
=> #<ActiveRecord::Relation [#<Listing id: 1, user_id: 1, deleted: false, rent: "$950", deposit: "$950", availability: "6/18/2015", min_duration: "11", male_count: "0", female_count: "1", longitude: "-73.9767700960917", latitude: "40.75831025967895", location: "Midtown Center", comments: "Sequi acidus utor sublime cito autus suasoria. Ips...", photos: "1.jpg, 2.jpg, 3.jpg", cat: false, dog: false, doorman: true, large_room: true, apartment: true, house: false, garden: true, personal_bathroom: false, dog_friendly: true, cat_friendly: false, laundry: false, gym: true, elevator: true, renovated: true, furnished: false, smoking: true, smoke_free: false, air_conditioning: false, utilities_included: true, four_twenty_friendly: false, gay_friendly: false, vegan_friendly: false, vegetarian: true, kosher: false, girls_only: false, guys_only: true, created_at: "2015-07-17 20:09:21", updated_at: "2015-07-17 20:09:21">]>
【问题讨论】:
-
试试这个
Listing.joins(:user).limit(100) -
您能否发布您预期输出的示例哈希
-
.joins 不起作用。这只会将其范围限定为仅包含用户的列表,而不包括用户
标签: ruby-on-rails ruby postgresql activerecord