Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Ruby返回TypeError:can';t将对象转换为字符串_Ruby On Rails - Fatal编程技术网

Ruby on rails Ruby返回TypeError:can';t将对象转换为字符串

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

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