Ruby on rails Rails 5从表中获取特定字段/值

Ruby on rails Rails 5从表中获取特定字段/值,ruby-on-rails,Ruby On Rails,我有一张桌子叫group。我希望此方法只返回相关记录的ID字段的内容。此时,它返回一个活动记录对象ID def get_group_name(group_id) Group.select([:name]).where("id = ?", group_id) end 提前谢谢。我想你可以用find做得更容易些 def get_group_name(group_id) Group.find(group_id).name end 这将仅获取组的名称 def get_group_name

我有一张桌子叫group。我希望此方法只返回相关记录的ID字段的内容。此时,它返回一个活动记录对象ID

def get_group_name(group_id)
    Group.select([:name]).where("id = ?", group_id)
end

提前谢谢。

我想你可以用find做得更容易些

def get_group_name(group_id)
  Group.find(group_id).name
end

这将仅获取组的名称

def get_group_name(group_id)
  Group.where(id: group_id).limit(1).pluck(:name).first
end
它将运行以下查询:

SELECT name
  FROM groups
 WHERE id = ?
 LIMIT 1;
另一个注意事项是,小心你在做什么。任何时候,只要你有一个方法来获取一个字段的值,虽然它有时会更有效,但很容易被误用。如果您在一组组id上循环试图获取所有名称,那么最好先查询一个所有名称,而不是在页面上每个组id查询一个名称。因此,只需关注您的控制台,并注意您正在运行的查询


此外,如果您正在查看集合,您可能希望查看ActiveRecord查询的
includes
,以便在上一次查询中包括组数据。您可以对这一切进行基准测试,以找出最快的用例

只需知道,这将从数据库中选择整个组行,并将其丢弃,以仅保留名称,这对于一个字段来说是非常多的额外开销。没有很好的理由使用这种方法,因为您最好只使用一个名为
group
的关联,该关联由ActiveRecord缓存。看看我的答案,它解释了如何只从数据库中选择组的名称,以及可能出现的陷阱。另外,与直接提取字段相比,ActiveRecord对象在内存中的创建速度较慢。您在哪里使用这种方法?看起来像是你想在视图中使用的东西。。。所以我想知道你想要解决的问题是否应该通过这个来解决。