处理Ruby / Rails中的多级哈希

时间:2015-01-23 04:28:48

标签: ruby-on-rails ruby

我正在从一个返回rails应用程序中的多级哈希的API请求数据。我需要在API响应的不同点访问信息,所以我在我的视图中有这样的代码:

<%= @api_response["Hash 1"]["Hash 2"]["Hash 3"]["value"] %>

在同一个视图文件中,我可能会有:

<%= @api_response["Hash 1"]["value"] %>

这是处理API响应中的大哈希的可接受方式吗?或者有更好的方法可以处理?

2 个答案:

答案 0 :(得分:1)

您可以查看recursive-open-struct gem,它允许像方法一样访问哈希,也更清晰。

答案 1 :(得分:0)

要回答这个问题,您可以使用数组使用宝石<?php // Some other code here // These if statements are my error handling if(!isset($var)) { $message = 'Var is not set' exit('<title>Error Page</title>'.$message.'<footer>Test Footer</foot>'); } if($a != $b) { $message = 'a is not equal to b'; exit('<title>Error Page</title>'.$message.'<footer>Test Footer</foot>'); } $success = 'YAY, we made it to the end'; ?> <html> <header> <title>YAY</title> <!-- Other stuff here --> </header> <!-- Other stuff here --> <body> <!-- Other stuff here --> <?php echo $success ?> <!-- Other stuff here --> </body> <!-- Other stuff here --> <footer>The best footer</footer> </html> 遍历哈希的路径:

xkeys

这样,您可以动态确定所需的路径。请记住,h_path = %w[hash1 hash2 hash3] # string array api_response.extend XKeys::Hash api_response[*h_path] # or api_response.xfetch(*h_path) 会将数组更改为*#[]的参数。

但是,以您的示例为例,您需要制作一些方法或设置其他变量以提高视图的可读性。您应该在视图中消除尽可能多的代码。因此,您应该确定要调用的信息,然后将其设置为控制器中的变量,或者定义帮助程序方法以解析每种类型的响应。