【发布时间】:2016-10-15 06:14:48
【问题描述】:
让我们举个例子。我们有两个具有这种关联的模型
class Post < ActiveRecord::Base
belongs_to :user
end
class User < ActiveRecord::Base
has_many :posts
end
如您所知,我们可以做到以下几点:
<%= @post.title %>
<%= @post.user.name %>
etc etc
这种关联通常会产生以下查询:
SELECT * FROM `posts` WHERE `post`.`id` = 1;
SELECT * FROM `users` WHERE `user`.`id` = 15; # from @post.user
现在,如果我想在列出所有帖子或只显示一个帖子时选择一些特定字段(让我们暂时假设没有关联),我会这样做:
@posts = Post.select("id, title, slug, created_at").all()
# or
@post = Post.select("id, title, slug, created_at").find(1)
在关联的情况下,如何为关联查询选择特定字段?换句话说,而不是拥有
SELECT * FROM `users`
SELECT * FROM `posts` WHERE `user_id` IN ( user IDs here )
拥有
SELECT `id`, `name` FROM `users`
SELECT `id`, `user_id`, `title`, `slug` FROM `posts` WHERE `user_id` IN ( user IDs here )
【问题讨论】:
标签: mysql sql ruby-on-rails optimization query-optimization