Rails访问哈希值

时间:2015-01-06 18:17:00

标签: ruby-on-rails ruby

我正在玩Netflix的Workflowable宝石。现在我正在制作自定义操作,用户可以选择。

我最终用{"id":1,"value":"High"}

拉出@options[:priority][:value]

我想要做的是获取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}

2 个答案:

答案 0 :(得分:5)

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

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

JSON.parse(值)[&#34; ID&#34;]

答案 1 :(得分:0)

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

看起来@options[:priority]是一个包含密钥:id:value的哈希值。所以你想要使用@options[:priority][:id](丢失返回字符串的:value)。