You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby on Rails中如何从数据库函数获取单个结果?

解决方案

直接获取并转换布尔值(推荐)

使用select_value方法可以直接拿到查询结果的第一行第一列值,这是最简洁的方式。PostgreSQL返回的布尔值在Ruby中是字符串"t"(对应true)或"f"(对应false),直接判断即可:

# 获取函数返回值
receipt_enabled = ActiveRecord::Base.connection.select_value("SELECT receipt_enabled FROM schema.receipt_enabled(158800)")
# 转换为Ruby布尔值并赋值
@showreceipt = receipt_enabled == 't'

如果想更规范地使用ActiveRecord的类型转换逻辑,可以用内置的布尔类型转换器:

boolean_converter = ActiveRecord::Type::Boolean.new
receipt_enabled = ActiveRecord::Base.connection.select_value("SELECT receipt_enabled FROM schema.receipt_enabled(158800)")
@showreceipt = boolean_converter.cast(receipt_enabled)

基于你已尝试的方式改造

如果你想沿用之前的execute.to_a或select_all.rows写法,只需提取对应的值再做判断:

方式1:基于execute.to_a的结果

result = ActiveRecord::Base.connection.execute("SELECT receipt_enabled FROM schema.receipt_enabled(158800)").to_a
@showreceipt = result.first["receipt_enabled"] == 't'

方式2:基于select_all.rows的结果

result = ActiveRecord::Base.connection.select_all("SELECT receipt_enabled FROM schema.receipt_enabled(158800)").rows
@showreceipt = result.first.first == 't'

关键说明

你之前的逻辑不生效是因为PostgreSQL返回的布尔值在Ruby中是以字符串"t"/"f"形式存在的,不是Ruby原生的true/false,所以直接用result == true无法匹配。

内容的提问来源于stack exchange,提问作者Lucho

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 08:01:01