0

我有一个对象用户和对象帖子。一个用户有_许多帖子,一个帖子属于_一个用户。我可以使用以下语法访问用户的帖子:

posts = @user.posts

但是,我想生成一个用户拥有的帖子的 id 数组,而不是遍历每个帖子。理想情况下,我想这样做:

ids = @user.posts.id

但是,我收到一个错误,说 id 是 ActiveRecord 的无效方法——等等……

有没有办法巧妙地做到这一点而不必做一个循环,如:

ids = []
posts = @user.posts
posts.each |post| do
   ids << post.id
end
4

4 回答 4

3

Rails 为此提供了一个本地方法

@user.post_ids

本质上,您可以使用模式引用has_many关联的 ID。<singular association name>_ids

于 2013-07-16T07:53:36.870 回答
2

尝试 ids = posts.map(&:id) or ids = posts.map{|p| p.id }

你也可以试试ids = posts.pluck(:id)

于 2013-07-16T06:29:07.520 回答
0

您也可以使用收集。收集返回数组。

ids = @user.posts.collect(&:id)
于 2013-07-16T07:52:45.097 回答
0

试试这个 :

@ids = @user.posts.map{|x| x.id }

希望它会有所帮助。

于 2013-07-16T08:10:21.277 回答