[英]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.