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_examplefind_value * 2end 如果我在 find_value(key) 中添加 'key' 参数,我该如何更改calculator_example 的函数,非常感谢!! 请看更新后的帖子,谢谢 那么,您要查找的密钥是什么?你没有在任何地方展示过。

以上是关于Ruby on rails:按键查找值的函数的主要内容,如果未能解决你的问题,请参考以下文章

Ruby on Rails:如何设置“查找”选项以不使用缓存

ruby on rails (函数使用)

Rails Guides - Ruby on Rails 安全指南

在 ruby​​ on rails 中公开函数

Ckeditor无法保存textarea值(Ruby on Rails)

ruby on rails 中的 Devkit 函数