Расширение свойств объекта на основе одного атрибута модели (приложение для отслеживания запасов)

Я пытаюсь создать небольшое веб-приложение с Ruby on Rails. Это простой инструмент для отслеживания акций, которые интересуют людей.

Для биржевых данных я использую гем stock_quote.

В настоящее время у меня есть модель с одним полем «тикер». Здесь люди будут вводить тикер акции, за которой они заинтересованы. Я хочу иметь возможность заполнять таблицу информации на основе тикера, когда пользователь входит в систему (полное название компании, цена и т. д.). Когда я тестирую свой текущий метод, я получаю ошибку «неинициализированная константа Target:: StockQuote». Однако, когда я вызываю свои методы get_current_price или get_company_name в консоли, они работают отлично. Я знаю, что мне нужно держать свои взгляды тупыми, но я не уверен, как сделать это проще, чем это, и заставить их работать правильно.

Я хотел бы иметь возможность заполнять таблицу панели управления информацией об акциях, за которыми наблюдают пользователи. Учитывая, что модель хранит тикер (то есть AAPL), мне нужно каким-то образом ввести тикер в серию методов модели, которые извлекают правильные данные из API stock_quote и возвращают результат в мою HTML-таблицу.

Спасибо за помощь

Полная трассировка стека

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>

person Questifer    schedule 06.06.2013    source источник
comment
Пожалуйста, опубликуйте полную трассировку стека вашего исключения и информацию о том, что вы пытаетесь сделать.   -  person usha    schedule 07.06.2013
comment
Откуда edit_target_path. Можем ли мы увидеть класс для этого и файл маршрутов, потому что вы говорите, что получаете ошибку uninitialized constant Target::StockQuote, но класса Target нет.   -  person ChuckJHardy    schedule 07.06.2013


Ответы (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_name и 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
person Carlos Drew    schedule 06.08.2013