ruby-on-rails - rails : build array with the value from a certain model attribute

标签 ruby-on-rails ruby

我有一个名为“Notation”的模型,其属性为“name”和“tag” 在其 Controller 中,有一个操作将返回一个 json,其中包含包含所有“标签”值(所有模型记录中的“标签”值)的数组。

我已经实现了这个:

@tags = Notation.all.map{ |notation| notation.tag }
render json: @tags

这可行,但是我检查了控制台并看到了已查询的 SQL:

SELECT "notations".* FROM "notations"

我想知道是否有另一种方法使用 ActiveRecord 只查询“标签”属性(主要是因为性能问题),或者这是我不必担心的事情

最佳答案

当使用all时,您将从模型中获取所有属性。

您可以使用 select 并仅询问 tag 属性,并且您将给出类似“SELECT "notations"."tag"FROM "notations""的查询但您会得到一个 Notation::ActiveRecord_Relation 对象类型,并且您应该使用 map 来仅获取具有所需属性的数组。

Visit.select(:name).map(&:name)

要跳过 map 部分来创建数组,您可以使用 pluck,如下所示:

@tags = Notation.pluck :tag
render json: @tags

这也应该只查询 Notation 对象中的 tag 属性:

SELECT "notations"."tag" FROM "notations"

关于ruby-on-rails - rails : build array with the value from a certain model attribute,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47178408/

相关文章:

ruby-on-rails - rvm 和 rbenv 在同一台机器上

ruby-on-rails - bundle 更新会创建 ArgumentError

ruby-on-rails - 将所有设计 Controller 配置为使用不同的布局?

ruby-on-rails - 在 Centos 上安装 Redmine

sql - 报告一组记录的分组平均值

ruby - 像 Rails 中的 before_filter 一样执行方法

ruby-on-rails - ruby rails : cURL DELETE token authentication

ruby-on-rails - rails 不会为 View 加载应用程序布局。我应该在哪里看?如何调试?

ruby-on-rails - Rails 4 - 如果出错,异常通知程序不会发送电子邮件

ruby - Sinatra 使用 Thin 代替 Puma