Rails 访问哈希值

Rails access hash value

我正在玩 Netflix 的 Workflowable gem。现在我正在制作一个自定义操作,用户可以在其中进行选择。

我最终用 @options[:priority][:value]

拉出了 {"id":1,"value":"High"}

我想要做的是获取 id 值 1。知道如何提取它吗?我试过 @options[:priority][:value][:id] 但似乎是通过错误。

操作如下所示like/how我正在记录值:

class Workflowable::Actions::UpdateStatusAction < Workflowable::Actions::Action
  include ERB::Util
  include Rails.application.routes.url_helpers

  NAME="Update Status Action"
  OPTIONS = {
      :priority => {
        :description=>"Enter priority to set result to",
        :required=>true,
        :type=>:choice,
        :choices=>[{id: 1, value: "High"} ]
      }
    }

  def run
    Rails.logger.debug @options[:priority][:value]
  end

end

这是错误:

Error (3a7b2168-6f24-4837-9221-376b98e6e887): TypeError  in ResultsController#flag
no implicit conversion of Symbol into Integer

这是 @options[:priority] 的样子:

{"description"=>"Enter priority to set result to", "required"=>true, "type"=>:choice, "choices"=>[{"id"=>1, "value"=>"High"}], "value"=>"{\"id\":1,\"value\":\"High\"}", "user_specified"=>true}

我假设错误类似于 TypeError: no implicit conversion of Symbol into Integer

看起来 @options[:priority] 是一个包含键 :id:value 的散列。所以你会想使用 @options[:priority][:id] (失去 :value 即 returns 的字符串)。

@options[:priority]["value"] 看起来是一个包含 json 的强字符串,而不是散列。这就是为什么在使用 [:id] 时会出错(此方法不接受符号)以及为什么 ["id"] returns 字符串 "id".

您需要首先解析它,例如使用 JSON.parse,此时您将拥有一个您应该能够正常访问的散列。默认情况下,键将是字符串,因此您需要

JSON.parse(值)["id"]