Ruby возвращает TypeError: невозможно преобразовать объект в строку - PullRequest
0 голосов
/ 05 ноября 2010

Я начинаю работать с Ruby, и у меня есть следующий модуль:

module RadioreportHelper
  @totalsum = 0
  @radio
  @daysAndTotals

  def load(service, transactionsPerDay)
    puts "#{service} : #{transactionsPerDay}"
    @radio = service
    @daysAndTotals = transactionsPerDay

    transactionsPerDay.each{|day, total|
      @totalsum += total
    }
  end
  attr_reader :radio, :daysAndTotals, :totalsum
end

Я запускаю следующий тестовый блок:

class RadioreportHelperTest < ActionView::TestCase
  fixtures :services
  def test_should_return_populated_radio_module
    service = Service.find_by_name("Mix")
    transactionsPerDay = {1=>20, 2=>30, 4=>40, 5=>50}
    radioReport = RadioreportHelper.load(service, transactionsPerDay)
    assert_not_nil(radioReport)
    assert_equal("Mix", radioReport.radio.name)
  end
end

Но я всегда получаюследующая ошибка: TypeError: невозможно преобразовать Service в String

Я хочу, чтобы объект service находился в модуле RadioreportHelper и сохранял его в переменной @ radio не строкаСпасибо за помощь, ребята!

Ответы [ 2 ]

1 голос
/ 05 ноября 2010

Попробуйте добавить метод to_s в модель сервиса.

def to_s
  service # or some other method in the model that returns a string
end

Нет необходимости вызывать to_s из интерполированного выражения, т.е. "#{service}" вернет результат service.to_s.

EDIT

Не обращайте внимания на все это. Ваш RadioreportHelper.load метод не доступен - вместо этого вы получаете load от ActiveSupport :: Dependencies :: Loadable. Попробуйте переименовать метод load во что-то другое.

(я ненавижу конфликты имен.)

1 голос
/ 05 ноября 2010

Вы обязательно должны попробовать это:

puts "#{service.to_s} : #{transactionsPerDay}"

Хотя я не уверен, как интерполяция для хэшей обрабатывается в строках, поэтому вам может потребоваться использовать

puts "#{service.to_s} : #{transactionsPerDay.to_s}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...