繁体   English   中英

轨道上的嵌套 if 语句 ruby 抛出错误

[英]Nested if statements ruby on rails throw error

我尝试应用这个,当我在表单中写一些不存在的东西而不是消息时,网页在@stock = StockQuote::Stock.quote(params[:ticker])中向我发送了错误。 当我什么都不写或者我写了正确的字符时,代码可以正常工作,就在我故意写错东西进行测试时,就会发生这种情况。 有什么建议吗?

方法

class HomeController < ApplicationController
  def index
    @stock = StockQuote::Stock.new(api_key: 'pk_7716557806964d85bbd63ceab9bbcbb2')
   
    if params[:ticker] == ''
        @nothing = 'Sorry, you forgot to write something, LOL'
    elsif params[:ticker]
        @stock = StockQuote::Stock.quote(params[:ticker]) 
        if !@stock
            @error = "Sorry, maybe you should try again, the symbol you wrote doesn't exist"
        end
        
    end

   end 

  def about
  end

  def lookup
  end

end

html


<%= form_tag root_path, :method => 'POST' do %>
    <%= text_field_tag 'ticker', nil, placeholder: 'Enter Ticker Symbol', size: 50 %>
    <%= submit_tag 'Lookup'%>
<% end %>

<% if @nothing %>
    <%= @nothing %>
<% elsif @stock %>
    <%= @stock.symbol %><br/>
    <%= @stock.company_name %><br/>
    <%= number_to_currency(@stock.latest_price , :unit => "$ ") %>
    <% if @error %>
        <%= @error %>
    <% end %>    
<% end %>

错误

查看错误消息,您对StockQuote::Stock.quote工作方式的假设似乎是不正确的。 如果params[:ticker]中的股票代码不存在但引发异常,则StockQuote::Stock.quote似乎不会返回nil

一个快速而肮脏的解决方法可能是更改这部分

elsif params[:ticker]
  @stock = StockQuote::Stock.quote(params[:ticker]) 
  if !@stock
      @error = "Sorry, maybe you should try again, the symbol you wrote doesn't exist"
  end
end

elsif params[:ticker]
  begin 
    @stock = StockQuote::Stock.quote(params[:ticker]) 
  rescue => e
    @error = "Sorry, maybe you should try again, the symbol you wrote doesn't exist"
  end
end

对于更量身定制的错误处理,您需要提供来自日志文件的完整错误消息,包括堆栈跟踪。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM