【问题标题】:Rails access hash valueRails 访问哈希值
【发布时间】:2015-01-07 03:00:29
【问题描述】:

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

我最终用@options[:priority][:value] 拉出{"id":1,"value":"High"}

我想要做的是获得 1 的 id 值。知道如何将它拉出来吗?我试过@options[:priority][:value][:id],但这似乎是一个错误。

这是动作的样子/我如何记录值:

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}

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

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

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

    JSON.parse(value)["id"]

    【讨论】:

      【解决方案2】:

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

      看起来@options[:priority] 是一个带有:id 和:value 键的散列。所以你会想使用@options[:priority][:id](丢失返回字符串的:value)。

      【讨论】:

      • 你猜对了——我用错误更新了帖子。但是,当我执行 @options[:priority][:id] 时,它最终会记录一个空行
      猜你喜欢
      • 2014-04-09
      • 2017-03-01
      • 2013-06-06
      • 2017-08-08
      • 2014-05-06
      • 2013-03-22
      • 2012-12-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多