【问题标题】:Ruby on Rails ActiveRecord query select only column string field value with where clause?Ruby on Rails ActiveRecord查询仅选择带有where子句的列字符串字段值?
【发布时间】:2018-06-30 13:30:23
【问题描述】:

我想知道是否有一种方法可以使用带有类似于这种方式的 where 子句的 select 语句,这在 Ruby 版本 2.0/Rails 4.0 中似乎对我不起作用,试图检索一个城市的单个记录字符串值其中建筑物名称是某个名称:

building_city = Building.select(:city).where(building_name: building).uniq

我也试过了:

building_city = Building.select(:city).where(building_name: building).distinct

目前我的代码是这样工作的:

building_city = Building.where(building_name: building).first

这会抓取整个 Building 对象,然后我可以通过以下方式调用城市:

building_city.city

这很适合我想要实现的目标,但我想知道是否有更聪明的方法来做到这一点。具体来说,我想知道是否有一种方法可以仅获取建筑物名称等于某个建筑物的城市的字符串值并将其存储到变量中?

非常感谢任何帮助/建议! :)

【问题讨论】:

    标签: sql ruby-on-rails ruby ruby-on-rails-4 activerecord


    【解决方案1】:

    building_city = Building.select(:city, :building_name).where(building_name: building).uniq——您需要包含building_name

    【讨论】:

    • 这对我不起作用。对不起。什么都不输出?让它打印有技巧吗?您希望它存储什么样的对象?
    【解决方案2】:

    您是否正在寻找pluck?比如:

    cities = Building.where(building_name: building).uniq.pluck(:city)
    

    这将执行此 SQL:

    select distinct city from buildings where building_name = '...'
    

    并将城市作为字符串数组提供给您。您仍然会得到一个数组,但如果您确定只有一个条目,则可以快速调用 first 来解决这个问题。

    【讨论】:

    • 对不起...只是想澄清我的后续问题,在这种情况下 .shift 和 .first 有什么区别?有关系吗?
    • 如果你有一个数组,那么shift 修改数组,first 给你arr[0] 而不修改arr。如果您正在使用 ActiveRecord 关系,那么first 将或多或少地在查询中抛出LIMIT 1 并且只提取一个对象。
    • cool 感谢您的反馈,并将您的答案标记为对我来说正确的解决方案!谢谢!
    猜你喜欢
    • 1970-01-01
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多