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"]
我正在玩 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"]