【问题标题】:this method is not working in Ruby on Rails此方法在 Ruby on Rails 中不起作用
【发布时间】:2014-08-01 13:25:57
【问题描述】:

我正在使用 ActiveRecord 表作为数据源构建一个类,其中包含 46 个项目 我不明白这里的问题,好像我无法提取新数组中的项目?

这是我的 Rspec 结果:

失败:

  1) TrainSearch :rows has 46 items
     Failure/Error: expect(checker.data).to eq(46)

       expected: 46
            got: #<ActiveRecord::Relation []>

       (compared using ==)

这是我的代码:

class TrainSearch

    attr_reader :data

    def initialize
      @data = Timetable.all
    end

    def rows
      @rows ||= @data.map {|row| Row.new(row)}
    end
end

这是我的代码: file

感谢您的宝贵时间!

【问题讨论】:

  • 你不是在比较一个数组和一个数字吗?你不应该有expect(checker.data.size).to eq(46)
  • @Baloo 你好!如果我喜欢你建议我得到这个:1)TrainSearch:rows 有 46 个项目失败/错误:expect(checker.data.size).to eq(46) expected:46 got: 0

标签: ruby-on-rails rspec


【解决方案1】:

Baloo 在 cmets 中指出的情况似乎差不多。您的错误消息明确告诉您它的比较。

没有看到代码本身,解释起来有点困难,但这里就可以了。

您正在查询数据库中的一些记录(行?)并期望其中有 46 个。 您的查询返回一个 ActiveRecord 关系(所有行的数组)。要弄清楚你需要做多少行:

checker.data.count

您似乎还有另一个错误,我无法从给定的信息中找到。您的查询返回一个空数组,因此 count 将为 0 并且仍然会失败。

【讨论】:

  • @jjkeuhlen 是正确的,我也得到了 nil,但为什么呢?时间表数据库已满 obj:s
  • 哪个数据库已满?您的问题可能是您试图测试在开发数据库而不是测试数据库中创建的数据(它们是单独的数据库)?
  • 嘿,这是正确的,我的数据是在 dev.section 中创建的。现在我认为使用 'rake db:test:prepare' 我创建了我的常规数据库的克隆?
  • 我认为只有在最初使用 ./config/seeds.rb 文件创建数据时才复制数据?我可能错了。请查看this SO question 或this one 了解更多信息。
猜你喜欢
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多