我开始使用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 变量中而不是字符串中。 谢谢,为所有的帮助人员!
答案 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
方法重命名为其他方法。
(我讨厌名字冲突。)