0

我正在尝试使用 Ruby on Rails 构建一个小型 Web 应用程序。这是一个跟踪人们感兴趣的股票的简单工具。

对于股票数据,我使用的是stock_quote gem

目前,我有一个带有单个字段“ticker”的模型。在这里,人们会输入他们感兴趣的股票的股票代码。我希望能够在用户登录时根据代码填充信息表(完整的公司名称、价格等)。当我测试我当前的方法时,我得到一个“未初始化的常量 Target::StockQuote”错误。但是,当我在控制台中调用我的方法 get_current_price 或 get_company_name 时,它​​们可以正常工作。我知道我需要保持我的观点保持沉默,但我不确定如何让它比这更简单 - 并让它们正常工作。

我希望能够用用户正在观看的股票信息填充我的仪表板表。鉴于模型存储了代码(即 AAPL),我需要以某种方式将代码输入到模型中的一系列方法中,这些方法从 stock_quote API 中提取正确的数据并将结果返回到我的 HTML 表中。

谢谢您的帮助

完整的堆栈跟踪

股票.rb

class Stock < ActiveRecord::Base
  attr_accessible :ticker

def get_company_name(ticker)
  company_name = StockQuote::Stock.quote(ticker).company
end

def get_current_price(ticker)
  company_name = StockQuote::Stock.quote(ticker).last
end
end 

stock_controller.rb

class StocksController < ApplicationController

 def dashboard
  @stocks = Stock.all
 end 

end

仪表板.html.erb

<tbody>
    <% @stocks.each do |stock| %>
    <tr>
        <td><%= stock.get_company_name(stock.ticker) %></td>
        <td><%= stock.stock %></td>
        <td><%= button_to "Delete", edit_target_path, :class => "btn btn-small btn-danger" %> </td>
    </tr>
    <% end %> 
</tbody>
4

1 回答 1

-1

您需要更新按钮以指向stock对象并告诉它该操作的操作和方法是delete.

<td><%= button_to "Delete", {:action => "delete", :id => stock.id }, :method => :delete, :class => "btn btn-small btn-danger" %></td>

请参阅:http ://apidock.com/rails/v3.2.8/ActionView/Helpers/UrlHelper/button_to

或者,我认为这种语法更好:

<td><%= link_to "Delete", stock, :method => :delete, :class => "btn btn-small btn-danger" %></td>

奖金

您的 Stock 类编写效率低下。由于您正在调用实例方法,因此您不需要将ticker值传递给get_company_nameand get_current_price。实例方法已经在特定 Stock 对象的上下文中运行,因此它们已经知道值ticker是什么。这就是stock在您的视图中调用该方法的含义,即stock.company_name.

class Stock < ActiveRecord::Base
  attr_accessible :ticker

  def company_name
    StockQuote::Stock.quote(ticker).company
  end

  def current_price
    StockQuote::Stock.quote(ticker).last
  end
end
于 2013-08-06T19:10:05.643 回答