【发布时间】:2016-02-02 14:56:52
【问题描述】:
我有一个与可扩展新闻 API 链接的 T 恤应用程序。我有一个可行的解决方案,但必须有更好的方法。该 api 的产品具有一系列颜色,颜色具有一系列图像。我想显示“正面”的图像,但数组中的第一个图像并不总是前面。我的视力很窄,因为我想不出比这更好的方法来查询数组中的标签“Front”......
查看:
<% if @product['colors'][0]['images'][0]['label'] =='Front' %>
<%= image_tag @product['colors'][0]['images'][0]['url'] %>
<% elsif @product['colors'][0]['images'][1]['label'] =='Front' %>
<%= image_tag @product['colors'][0]['images'][1]['url'] %>
<% elsif @product['colors'][0]['images'][2]['label'] =='Front' %>
<%= image_tag @product['colors'][0]['images'][2]['url'] %>
<% elsif @product['colors'][0]['images'][3]['label'] =='Front' %>
<%= image_tag @product['colors'][0]['images'][3]['url'] %>
<% end %>
控制器:
def show_product
@product = scalable_press.show_product(params[:product])
end
有没有更好的方法来做到这一点?
【问题讨论】:
-
当我看到这样的代码时,只有一个问题要问:你是怎么得到这个数据结构的?
@product是什么,为什么colours属性包含的任何内容都有图像属性? -
他说,是因为一个API。有时您无法控制返回的内容,
-
@Leito - 错过了那部分。我同意您无法控制返回的内容,但您可以控制如何处理它。如果它来自 json,那么创建一个负责将 json 转换为可用对象的类就很容易了。那么上面的代码就只会读取
@product.colors.first.front_image_url,没有任何不必要的条件,都是分类的,易于阅读。 -
是的,我无法控制 api 返回的内容。我讨厌它,但由于某种原因,我无法提出更好的解决方案。每种颜色有 4 张图像,正面、背面、左袖和右袖。图像数组具有 URL 和标签。我发现他们的 API 有点草率,但他们打印的衬衫质量非常好,而且手动输入订单开始花费我太长时间。
标签: ruby-on-rails arrays ruby json httparty