Ruby返回TypeError:无法将Object转换为String

时间:2010-11-05 17:01:22

标签: ruby-on-rails

我开始使用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

我希望服务对象位于模块RadioreportHelper中,并将其存储在 @radio 变量中而不是字符串中。 谢谢,为所有的帮助人员!

2 个答案:

答案 0 :(得分:1)

你一定要试试这个:

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

虽然我不确定如何在字符串中处理哈希插值,因此您可能需要使用

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

答案 1 :(得分:1)

尝试在服务模型中添加to_s方法。

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

没有必要从插值表达式中调用to_s,即"#{service}"将返回service.to_s的结果。

修改

别介意这一切。您的RadioreportHelper.load方法尚未到达 - 而是从ActiveSupport :: Dependencies :: Loadable获得load。尝试将load方法重命名为其他方法。

(我讨厌名字冲突。)