基于单个模型属性(库存跟踪应用程序)展开对象属性

时间:2013-06-06 20:42:42

标签: ruby-on-rails ruby rails-activerecord stockquotes

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

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

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

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

感谢您的帮助

Full stacktrace

stock.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 

stocks_controller.rb

class StocksController < ApplicationController

 def dashboard
  @stocks = Stock.all
 end 

end

dashboard.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>

1 个答案:

答案 0 :(得分:-1)

您需要更新按钮以指向stock对象并告诉它操作&amp;该操作的方法是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>

<强>加成

您的股票类别编写效率低下。由于您正在调用实例方法,因此您无需将ticker值传递给get_company_nameget_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