Ruby on rails Ruby返回TypeError:can';t将对象转换为字符串
我开始使用Ruby,我有以下模块:Ruby on rails Ruby返回TypeError:can';t将对象转换为字符串,ruby-on-rails,Ruby On Rails,我开始使用Ruby,我有以下模块: module RadioreportHelper @totalsum = 0 @radio @daysAndTotals def load(service, transactionsPerDay) puts "#{service} : #{transactionsPerDay}" @radio = service @daysAndTotals = transactionsPerDay transactions
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
class RadioreportHelperTest20,2=>30,4=>40,5=>50}
radioReport=RadioreportHelper.load(服务,事务每天)
断言不为零(无线电报告)
断言相等(“混合”,radioReport.radio.name)
结束
结束
但我总是会遇到以下错误:
TypeError:无法将服务转换为字符串
我希望服务对象位于模块RadioreportHelper中,并将其存储在@radio变量中,而不是字符串中。
谢谢大家的帮助 你一定要试试这个:
puts "#{service.to_s} : #{transactionsPerDay}"
虽然我也不确定如何在字符串中处理哈希的插值,所以您可能需要使用
puts "#{service.to_s} : #{transactionsPerDay.to_s}"
尝试向您的服务模型中添加
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
方法重命名为其他方法
(我讨厌名称冲突。)提供服务。按名称(“混合”)查找。to_字符串也会抛出错误吗?如果是这样的话,考虑转换它自己,而不是依赖它的toSyScript方法。服务。按名称查找服务(“Mix”)从服务夹具中毫无问题地带来一个“服务”对象。我希望服务对象传递到RadioreportHelper模块。但是,当我将它从测试传递到模块时,它会显示该错误(TypeError:无法将服务转换为字符串)。谢谢Brett,但我希望在RadioreportHelper中包含服务模型本身,而不是字符串。服务模块实现了to_s:def to_s return“id:#{id},group:#{group},location:#{location},genre:#{genre}”end您有错误的堆栈跟踪吗?您列出的错误:
TypeError:can't convert Service to String
听起来像是来自我答案中的那一行。如果您在puts
行中使用service.to_,它将服务作为puts调用的文本输出。它不会更改服务变量的值,因此在下一行中,当您执行@radio=service
时,您的RadioreportHelper.Thx Brett中仍然会有服务模型,但我仍然有相同的错误@Zettetic建议,这可能是父类使用的方法(由于ruby不会覆盖/重载其方法),因此我应该对其进行更改。但是,当我更改它时,我得到了以下信息:NoMethodError:RadioreportHelper:module的未定义方法'loadRadioTransaction',如果注释掉行put“#{service}:#{transactionsPerDay}”
并运行测试用例会发生什么?你也可以编辑你的问题并添加你得到的异常的堆栈跟踪吗?嗨,Brett!刚刚发现问题是测试找不到文件“RadioreportHelper”。我刚刚添加了include RadioreportHelper,一切都很好;)嘿,泽蒂!我已经在服务中实现了。但我想将“服务”保存到RadioreportHelper中,并将引用保存在@radio变量中,以便在视图中使用它。我不太理解这个错误(TypeError:无法将服务转换为字符串)。它应该保持来自模块测试的“服务”,对吗?奇怪。错误是否仅在测试时发生?还是在呈现模板时也会发生这种情况?我只在测试时尝试过。我正在使用ruby 1.9.2和rails 3I将方法从“load”更改为“loadRadioTransaction”,现在我有了:NoMethodError:RadioreportHelper:module的未定义方法“loadRadioTransaction”。测试类找不到模块定义。可能是名称或路径问题?尝试在测试文件中添加包含RadioreportHelper
。