Обработка хэша котировок Yahoo Finance в Rails 3 - продолжение - PullRequest
0 голосов
/ 28 ноября 2011

A) Код контроллера:

  def show
    @quote_list = params[:symbol]
    puts @quote_list

    require 'yahoofinance'

    quote_type = YahooFinance::StandardQuote

    quote_symbols = @quote_list

    @quote_info = YahooFinance::get_quotes( quote_type, quote_symbols ) do |qt|
      puts qt.symbol
      puts qt.bid.to_s
      puts qt.ask.to_s
    end
  end

Часть, которая обращается к хэшу Yahoo Finance, находится внизу - я использовал это для запуска службы SMS в другой процедуре. Код вида состоит из:

<p>Stock Symbol(s) Requested: <%= @quote_list %> </p>
<p>Quote Details : </p> <%= @quote_info %>

<table>
  <tr>
    <th>Stock Symbol</th>
    <th>Company Name</th>
    <th>Bid</th>
    <th>Ask</th>
    <th>Last Trade</th>
    <th>Trade Price</th>
    <th></th>
  </tr>

<% @quote_list.each do |stock| %>
  <tr>
    <td><%= stock.symbol %></td>
    <td><%= stock.name %></td>
    <td><%= stock.bid.to_s %></td>
    <td><%= stock.ask.to_s %></td>
    <td><%= stock.lastTradeTime.to_s %></td>
    <td><%= stock.lastTrade %></td>
  </tr>
<% end %>
</table> 

Ошибка компиляции показана ниже:

SyntaxError in Screenquotes#show

Showing /home/lvl9/waf_projects/squotes_app/app/views/screenquotes/show.html.erb where line #24 raised:

compile error
/home/lvl9/waf_projects/squotes_app/app/views/screenquotes/show.html.erb:24: syntax error, unexpected tIVAR
...buffer.append= ( stock.@symbol );@output_buffer.safe_concat(...
                              ^

Extracted source (around line #24):

21: 
22: <% @quote_list.each do |stock| %>
23:   <tr>
24:     <td><%= stock.@symbol %></td>
25:     <td><%= stock.name %></td>
26:     <td><%= stock.bid.to_s %></td>
27:     <td><%= stock.ask.to_s %></td> 


Listing of @quote_info instance variable hash contents from rails console session shown below :

irb(main):051:0> quote_symbols = "goog,yhoo"
=> "goog,yhoo"
irb(main):052:0>  @quote_info = YahooFinance::get_quotes( quote_type, quote_symbols ) 

{"GOOG" => # 563.00 ", @ dayHigh = 574.27, @ tickerTrend =" = - + === ", @ date =" 25.11.2011 ", @ averageDailyVolume = 3120350, @ name =" Google Inc. ", @ volume = 1562341, @formathash = {" v "=> [" volume "," val.to_i "]," a "=> [" ask "," val.to_f "]," l "=> [" lastTradeWithTime "," val "]," b "=> [" bid "," val.to_f "]," m "=> [" dayRange "," val "]," p2 "=> [" changePercent "," val.to_f "]," d1 "=> [" date "," val "], "t7" => ["tickerTrend", "convert (val)"], "c1" => ["changePoints", "val.to_f"], "c" => ["change", "val"], "n" => ["name", "val"], "o" => ["open", "val.to_f"], "p" => ["previousClose", "val.to_f"],"l1" => ["lastTrade", "val.to_f"], "a2" => ["averageDailyVolume", "val.to_i"], "g" => ["dayLow", "val.to_f"], "t1" => ["time", "val"], "h" => ["dayHigh", "val.to_f"], "s" => ["symbol", "val "]}, @ time =" 1:00 pm ", @ open = 565.19, @ bid = 0.0, @change =" - 7.11 - -1.25% ", @ ask = 620.0, @ dayLow = 561.33, @ changePercent = -1.25, @ lastTrade = 563.0>, "YHOO" => # 15.10 ", @ dayHigh = 15.25, @ tickerTrend =" ====== ", @ date =" 25.11.2011 ", @ averageDailyVolume = 32945700,@ имя = "Yahoo!Inc. ", @ volume = 10781728, @formathash = {" v "=> [" volume "," val.to_i "]," a "=> [" ask "," val.to_f "]," l "=> ["lastTradeWithTime", "val"], "b" => ["bid", "val.to_f"], "m" => ["dayRange", "val"], "p2" => ["changePercent", "val.to_f"], "d1" => ["date", "val"], "t7" => ["tickerTrend", "convert (val)"], "c1" => ["changePoints", "val.to_f"], "c" => ["change", "val"], "n" => ["name", "val"], "o" => ["open", "val.to_f"], "p" => ["previousClose", "val.to_f"], "l1" => ["lastTrade", "val.to_f"], "a2" => ["averageDailyVolume"," val.to_i "]," g "=> [" dayLow "," val.to_f "]," t1 "=> [" time "," val "]," h "=> [" dayHigh ", "val.to_f"], "s" => ["symbol", "val"]}, @ time = "13:00", @ open = 15.05, @ bid = 13.5, @change = "+ 0.16 -+ 1,07% ", @ ask = 0.0, @ dayLow = 14.9, @ changePercent = 1.07, @ lastTrade = 15.1>} Я пытаюсь отобразить символ, ставку, спрос, последнюю сделку и цену последней сделки для каждого участника (т.е.Yhoo) из этого хэша в цикле в файле представления.

Надеюсь, это проясняет ситуацию - помощь действительно приветствуется.

1 Ответ

0 голосов
/ 28 ноября 2011

Вы используете @symbol, когда оно должно быть просто symbol, так же, как и все другие переменные класса, к которым вы обращаетесь в том же шаблоне.

edit Переменная @quote_list - это просто символы акций, а не информация о возвращенных котировках. Возвращенная информация находится в @quote_info, которая не содержит символ в качестве хеш-ключа.

Вы можете либо выполнить итерацию по символам и использовать каждый символ для доступа к соответствующему значению хеша, либо выполнить итерацию по хешу, используя оба значения ключа и в блоке; ключом будет символ.

Если вы не заботитесь о порядке, проще всего выполнить итерации по хешу.

<% @quote_info.each do |symbol, info| %>
    <%= symbol %> <%= info.open %>
... etc ...

Если вы занимаетесь заботой о порядке, то упорядочьте список символов так, как вам удобно, переберите их и получите информацию, связанную с каждым символом:

<% @quote_symbols.each do |symbol| %>
  <% info = @quote_info[symbol] %>
... etc ...
...