结果用 ruby​​ on rails 重复了几次消息

问题描述

我有这个代码

<% @lookup_coins.each do |x| %>
    <% if @symbol == '' %>
        <%= 'Sorry,but you forgot to write something,LOL'%>
    <% elsif @symbol == x %>
        <%= x["symbol"]%> <br/> <%= x["name"]%>: <%= number_to_currency(x['quote']['USD']['price'].round(2),:unit => "$ ") %> <br/> <%= x["cmc_rank"]%> <br/> 
    <% else 'Sorry,there was a mistake,try again'%>
<% end %>

信息如下:

[{"id"=>1,"name"=>"Bitcoin","symbol"=>"BTC","slug"=>"bitcoin","num_market_pairs"=>9713,"date_added"=>"2013-04-28T00:00:00.000Z","tags"=>["mineable","pow","sha-256","store-of-value","state-channels","coinbase-ventures-portfolio","three-arrows-capital-portfolio","polychain-capital-portfolio"],"max_supply"=>21000000,"circulating_supply"=>18633612,"total_supply"=>18633612,"platform"=>nil,"cmc_rank"=>1,"last_updated"=>"2021-02-20T07:45:02.000Z","quote"=>{"USD"=>{"price"=>55541.51774356704,...

我不确定如何以正确的方式进行

解决方法

您似乎未能与实际的 symbol 值匹配,而是期望 @symbol 与哈希完全匹配,但事实并非如此。

其次,您每次通过错误的循环都会打印“忘记写东西”的消息。您可以摆脱循环,只需使用 find 立即定位条目,然后作为奖励,您可以更轻松地检测“遗漏”条件。

看看是否能找到匹配的条目,否则显示消息。

修复看起来像:

<%- if @symbol.blank? -%>
  Sorry,but you forgot to write something.
<%- else -%>
  <%- found = @lookup_coins.find { |c| c['symbol'] == @symbol } -%>
  <%- if (found) -%>
    <%= found["symbol"]%> <br/> <%= found["name"]%>:
    <%= number_to_currency(found['quote']['USD']['price'].round(2),:unit => "$ ") %>
    <br/>
     <%= found["cmc_rank"]%> <br/> 
  <%- else -%>
    Sorry,there was a mistake,try again
  <%- end -%>
<%- end -%>

在这里使用 @symbol.blank?== '' 更宽容,因为它还会拒绝一堆空格和/或制表符。

提示:不要使用 <%= '...' %> 而是将文本按原样放置。默认是回显。

,
<% if @symbol %>
<%@resultant_symbol = @lookup_coins['data'].select {|lookup_coin| lookup_coin["symbol"] == @symbol }%>
<%if @resultant_symbol.present?%>
   <% x = @resultant_symbol.first %>
   <%= x["symbol"]%> <br/> <%= x["name"]%>: <%= number_to_currency(x['quote']['USD']['price'].round(2),:unit => "$ ") %> <br/> <%= x["cmc_rank"]%> <br/> 
<%else%>
   <%= @symbol = 'Sorry,try again'%>
<%end%>