Ruby on rails CSV文件向后显示,RSpec失败

Ruby on rails CSV文件向后显示,RSpec失败,ruby-on-rails,ruby,rspec,Ruby On Rails,Ruby,Rspec,一般来说,我对Ruby是新手,无法找到一个解决方案来解释为什么我的条目_2.csv被向后导入。我的另一个.csv导入似乎是相同的语法,工作正常 以下是我的RSpec for.csv方法的一部分: require_relative "../models/address_book" RSpec.describe AddressBook do let(:book) {AddressBook.new} def check_entry(entry, expected_name, expected_p

一般来说,我对Ruby是新手,无法找到一个解决方案来解释为什么我的条目_2.csv被向后导入。我的另一个.csv导入似乎是相同的语法,工作正常

以下是我的RSpec for.csv方法的一部分:

require_relative "../models/address_book"

RSpec.describe AddressBook do

let(:book) {AddressBook.new}

def check_entry(entry, expected_name, expected_phone_number, expected_email)
    expect(entry.name).to eq(expected_name)
    expect(entry.phone_number).to eq(expected_phone_number)
    expect(entry.email).to eq(expected_email)
end

describe "#import from csv" do

    it "imports the correct number of entries" do

        book.import_from_csv("entries.csv")
        book_size = book.entries.size

        expect(book_size).to eq 5

    end

    it "imports the 1rst entry" do

        book.import_from_csv("entries.csv")
        entry_one = book.entries[0]
        check_entry(entry_one, "Bill", "555-555-4854", "bill@blocmail.com")

    end

    it "imports the 2nd entry" do

        book.import_from_csv("entries.csv")
        entry_two = book.entries[1]
        check_entry(entry_two, "Bob", "555-555-5415", "bob@blocmail.com")

    end

    it "imports the 3rd entry" do

        book.import_from_csv("entries.csv")
        entry_three = book.entries[2]
        check_entry(entry_three, "Joe", "555-555-3660", "joe@blocmail.com")


    end

    it "imports the 4th entry" do

        book.import_from_csv("entries.csv")
        entry_four = book.entries[3]
        check_entry(entry_four, "Sally", "555-555-4646", "sally@blocmail.com")

    end

    it "imports the 5th entry" do

        book.import_from_csv("entries.csv")
        entry_five = book.entries[4]
        check_entry(entry_five, "Sussie", "555-555-2036", "sussie@blocmail.com")

    end

    it "imports an additional 3 entries" do

        book.import_from_csv("entries_2.csv")
        book_size = book.entries.size

        expect(book_size).to eq 3

    end

    it "imports 1rst entry into additional csv" do

        book.import_from_csv("entries_2.csv")
        entry_one = book.entries[0]
        check_entry(entry_one, "Ralph", "222-222-2222", "ralph@comcast.net")

    end

    it "imports 2nd entry into additional csv" do

        book.import_from_csv("entries_2.csv")
        entry_two = book.entries[1]
        check_entry(entry_two, "Will", "333-333-3333","Will@comcast.net")

    end

    it "imports 3rd entry into additional csv" do

        book.import_from_csv("entries_2.csv")
        entry_three = book.entries[2]
        check_entry(entry_three, "Foobarr", "444-444-4444", "Foobarr@comcast.net")

    end
end
这是我的两个.csv文件:

entries.csv

条目2.csv

以下是我在检查RSpec时收到的错误:

失败:

1 AddressBookimport从csv导入1个条目到其他csv 失败/错误:expectentry.name.to eqexpected\u name

   expected: "Ralph"
        got: "Foobarr"

   (compared using ==)
 # ./spec/address_book_spec.rb:8:in `check_entry'
 # ./spec/address_book_spec.rb:142:in `block (3 levels) in <top (required)>'
   expected: "Will"
        got: "Ralph"

   (compared using ==)
 # ./spec/address_book_spec.rb:8:in `check_entry'
 # ./spec/address_book_spec.rb:150:in `block (3 levels) in <top (required)>'
   expected: "Foobarr"
        got: "Will"

   (compared using ==)
 # ./spec/address_book_spec.rb:8:in `check_entry'
 # ./spec/address_book_spec.rb:158:in `block (3 levels) in <top (required)>'
2 AddressBook从csv导入第二个条目到其他csv 失败/错误:expectentry.name.to eqexpected\u name

   expected: "Ralph"
        got: "Foobarr"

   (compared using ==)
 # ./spec/address_book_spec.rb:8:in `check_entry'
 # ./spec/address_book_spec.rb:142:in `block (3 levels) in <top (required)>'
   expected: "Will"
        got: "Ralph"

   (compared using ==)
 # ./spec/address_book_spec.rb:8:in `check_entry'
 # ./spec/address_book_spec.rb:150:in `block (3 levels) in <top (required)>'
   expected: "Foobarr"
        got: "Will"

   (compared using ==)
 # ./spec/address_book_spec.rb:8:in `check_entry'
 # ./spec/address_book_spec.rb:158:in `block (3 levels) in <top (required)>'
3 AddressBook从csv导入将第三个条目导入其他csv 失败/错误:expectentry.name.to eqexpected\u name

   expected: "Ralph"
        got: "Foobarr"

   (compared using ==)
 # ./spec/address_book_spec.rb:8:in `check_entry'
 # ./spec/address_book_spec.rb:142:in `block (3 levels) in <top (required)>'
   expected: "Will"
        got: "Ralph"

   (compared using ==)
 # ./spec/address_book_spec.rb:8:in `check_entry'
 # ./spec/address_book_spec.rb:150:in `block (3 levels) in <top (required)>'
   expected: "Foobarr"
        got: "Will"

   (compared using ==)
 # ./spec/address_book_spec.rb:8:in `check_entry'
 # ./spec/address_book_spec.rb:158:in `block (3 levels) in <top (required)>'
完成时间为0.05492秒文件加载时间为0.2885秒 17例,3例失败

为什么my entries.csv RSpec正确,而my entries_2.csv不正确?我错过了什么


谢谢

假设AddressBook是一个ActiveRecord模型,上面定义了许多条目,那么您遇到的核心问题是,除非您明确请求,否则不保证以任何特定顺序返回关系。因此:

簿记条目[0]

实际上正在运行:

从地址簿id=

然后获取该数组的第一个元素。因为上面的查询没有排序,所以返回的顺序是任意的;有时它反映了创造秩序,有时它不反映

您实际需要的是实际请求按创建顺序排列的记录,如:

book.entries.order'entries.id ASC'[0]


您还可以通过将order:“id ASC”作为参数添加到has\u many:entries定义中来实现这一点。

假设AddressBook是一个定义了has\u many:entries的ActiveRecord模型,您遇到的核心问题是,除非您明确请求,否则不保证以任何特定顺序返回关系。因此:

簿记条目[0]

实际上正在运行:

从地址簿id=

然后获取该数组的第一个元素。因为上面的查询没有排序,所以返回的顺序是任意的;有时它反映了创造秩序,有时它不反映

您实际需要的是实际请求按创建顺序排列的记录,如:

book.entries.order'entries.id ASC'[0]


您还可以通过将order:“id ASC”作为参数添加到has-many:entries定义中来完成此操作。

我终于找到了问题的解决方案。CSV.parse按字母顺序排序.CSV文件,我不知道这一点。在这一点上,我不确定如何操作这个特定的方法,但是,在.csv文件中重新排列我的名字解决了我的问题。

我终于找到了解决问题的方法。CSV.parse按字母顺序排序.CSV文件,我不知道这一点。此时,我不确定如何操作该特定方法,但是,在.csv文件中重新排列我的名字解决了我的问题。

我很抱歉,但所有这些对我来说都是比较新的。book.entries[0]到books.entries[5]工作正常,并通过entries.csv按正确顺序排列。我真正做的,至少是我的思考过程,是创建了一个新的book对象,并导入了一个不同的文件entries_2.csv。理论上,语法应该与importing entries.csv相同,对吗?您的数据很可能导入得很好,并且按照您期望的顺序导入。我的假设是,问题在于您对数据的检索没有指定顺序。为了验证这一点,我建议在插入行之后立即使用或其他调试器暂停测试,然后直接在bin/rails dbconsole test中检查测试数据库,运行类似SELECT*FROM entries的查询。我知道Dustin所说的代码库,实际上这不是rails项目的错,所以,因此,所有这些在其他方面有效的见解都不适用。我很抱歉,但所有这些对我来说都是比较新的。book.entries[0]到books.entries[5]工作正常,并通过entries.csv按正确顺序排列。我真正做的,至少是我的思考过程,是创建了一个新的book对象,并导入了一个不同的文件entries_2.csv。理论上,语法应该与importing entries.csv相同,对吗?您的数据很可能导入得很好,并且按照您期望的顺序导入。我的假设是,问题在于您对数据的检索没有指定顺序。为了验证这一点,我建议在插入行之后立即使用或其他调试器暂停测试,然后直接在bin/rails dbconsole test中检查测试数据库,运行一个类似SELECT*FROM entries的查询。我知道Dustin所说的代码库,实际上这不是rails项目错了,所以标记,所以所有的
否则有效的洞察将不适用。嗯。。CSV.parse不按字母顺序对行进行排序,请参见快速校对;尽管我认为这取决于您使用的Ruby的版本/实现。您的应用程序中出现了其他问题。我想如果你能把代码贴在AddressBookimport_from_csv.Hmm.后面会有帮助。。CSV.parse不按字母顺序对行进行排序,请参见快速校对;尽管我认为这取决于您使用的Ruby的版本/实现。您的应用程序中出现了其他问题。我认为如果你能将代码发布在AddressBookimport\u from\u csv后面,会有所帮助。