Sql 从关联模型中提取

Sql 从关联模型中提取,sql,ruby-on-rails,ruby,performance,postgresql,Sql,Ruby On Rails,Ruby,Performance,Postgresql,我有两种型号,User和Post帖子属于用户用户有一个名为名称的字段。我想提取用户的名字。我正在考虑做这样的事情 some_cool_posts = Post.limit(5) some_cool_posts.map(&:user).pluck(:name) 不幸的是,Pull不适用于数组,所以我可以 some_cool_posts.map(&:user).map(&:name) 我想知道在Rails中有没有更快的方法来实现这一点?如果我理解正确,您还可以: @po

我有两种型号,
User
Post
<代码>帖子属于
用户
<代码>用户有一个名为
名称
的字段。我想提取用户的名字。我正在考虑做这样的事情

some_cool_posts = Post.limit(5)

some_cool_posts.map(&:user).pluck(:name)
不幸的是,Pull不适用于数组,所以我可以

some_cool_posts.map(&:user).map(&:name)

我想知道在Rails中有没有更快的方法来实现这一点?

如果我理解正确,您还可以:

@posts_users = some_cool_posts.collect {|post| post.user }
@users_names = @posts_users.collect { |user| user.name }
你可以试着把它缩短到这个,但我不确定这是否有效:

@users_names = some_cool_posts.collect {|post| post.user }.collect { |user| user.name }

您有6个对db的请求,如果使用includes(),那么您将有两个请求

some_cool_posts = Post.includes(:users).limit(5)
some_cool_posts.map(&:user).map(&:name)
您可以通过一个请求获得带有用户名的帖子,如:

some_cool_posts = Post.joins(:user).select('posts.*, users.name as user_name').limit(5)
some_cool_posts.map &:user_name
还有,最快的方法是:

some_cool_posts = Post.limit(5)
uids = some_cool_posts.map &:user_id
User.where(id: uids).pluck :name

试试:
User.first.posts.pulk(:message)
Hmm。如果我想找到我的帖子列表中的用户名,该怎么办?什么是很酷的帖子?一系列帖子记录。我稍微整理了一下我的问题,并对其进行了修改,以反映我所处的情况。谢谢。如果一两天内没有其他人回答,我会奖励你。很高兴看到不同选择之间的基准是什么。