仅包含某些属性

时间:2016-02-07 21:55:03

标签: ruby-on-rails activerecord

有没有办法做类似的事情:

Book.includes(authors: {only: :first_name})

我只想要那个属性,而不是整个作者模型。

3 个答案:

答案 0 :(得分:0)

不,你不能。如果您不想加载所有数据,则可以加载书籍,然后对作者单独执行查询以使其名称单独使用:

books = Book.where(something_here)
author_ids = books.map(&:author_id)
author_names = Author.where(id: author_ids).pluck(:id, :first_name)

答案 1 :(得分:0)

您可以使用select获取每位作者的:first_name属性。

authors_first_names = Author.select(:first_name)

请参阅“活动记录查询接口的Rails指南”中的selecting specific fields

答案 2 :(得分:0)

如下:

Book.joins(:authors).select("books.*, authors.name as author_name")

结果关系中的每个实例都将在不执行其他SQL语句的情况下返回author_name