Ruby on rails:按键查找值的函数
Posted
技术标签:
【中文标题】Ruby on rails:按键查找值的函数【英文标题】:Ruby on rails: function to find value by key 【发布时间】:2021-12-30 10:00:53 【问题描述】:我刚刚遇到了一个ruby语法问题:
枚举示例为:
class AaaBbb < ApplicationRecord
enum number: a: 1, b: 2, c: 3, d: 5
或
class AaaBbb < ApplicationRecord
enum number: "a" => 1, "b" => 2, "c" => 3, "d" => 5
函数是:
def find_value
AaaBbb.numbers.each do |key, value|
puts "#key = #value"
if key == AaaBbb.numbers[:key] (WRONG CODE HERE, NEED TO FIX)
return value
else
return 0
end
end
end
所以我正在尝试编写一个函数,如果它找到键,则返回值。
【问题讨论】:
enum number...
将 AaaBbb 模型中名为 'number' 的列声明为 enum
列类型。你期望AaaBbb.numbers
是什么?没有与枚举列相关的类方法numbers
。
@LesNightingill Rails 在声明枚举时自动生成复数方法
@maxpleaner 你确定吗?我在 Rails 6.1.4.1 中没有看到它,我确实看到了一个与枚举列同名的奇异类方法。 (它返回列的键/值的散列)。
@maxpleaner 你是对的......,我没有在我的应用程序 b/c 中看到它,列名复数与单数相同! (它是“通过”)。
【参考方案1】:
您使用AaaBbb.numbers[:key]
而不是AaaBbb.numbers[key]
.. 也就是说,您传递的是符号:key
而不是实际值key
。
另外,您似乎还有第二个问题。您的循环将始终在第一次运行后结束。这是因为 Ruby 中的 return
不限于 each
。它将从 方法 返回,例如立即结束循环。
但实际上,我只是用更简单的逻辑重写这个方法。我认为你根本不需要循环。
def find_value(key)
val = AaaBbb.numbers[key] # this will be nil if the key isn't found
val || 0
end
【讨论】:
或AaaBbb.numbers.fetch(key, 0)
我之前尝试使用AaaBbb.numbers[key],但是前端的所有产品价格都显示为0。
另外因为我需要使用结果来find_value来计算。例如:def calculator_example
find_value * 2
end
如果我在 find_value(key) 中添加 'key' 参数,我该如何更改calculator_example 的函数,非常感谢!!
请看更新后的帖子,谢谢
那么,您要查找的密钥是什么?你没有在任何地方展示过。以上是关于Ruby on rails:按键查找值的函数的主要内容,如果未能解决你的问题,请参考以下文章
Ruby on Rails:如何设置“查找”选项以不使用缓存
Rails Guides - Ruby on Rails 安全指南