我正在从一个返回rails应用程序中的多级哈希的API请求数据。我需要在API响应的不同点访问信息,所以我在我的视图中有这样的代码:
<%= @api_response["Hash 1"]["Hash 2"]["Hash 3"]["value"] %>
在同一个视图文件中,我可能会有:
<%= @api_response["Hash 1"]["value"] %>
这是处理API响应中的大哈希的可接受方式吗?或者有更好的方法可以处理?
答案 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)
会将数组更改为*
或#[]
的参数。
但是,以您的示例为例,您需要制作一些方法或设置其他变量以提高视图的可读性。您应该在视图中消除尽可能多的代码。因此,您应该确定要调用的信息,然后将其设置为控制器中的变量,或者定义帮助程序方法以解析每种类型的响应。