Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.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 On Rails_Rspec - Fatal编程技术网

Ruby on rails 如何使用模型函数删除条目?

Ruby on rails 如何使用模型函数删除条目?,ruby-on-rails,rspec,Ruby On Rails,Rspec,我正在处理一项rails任务,该任务要求在模型中使用remove_entry方法,并对remove_entry进行工作测试。我考试不及格。有人对如何在addressbook.rb中定义remove_entry方法以及如何在entry_spec.rb中编写测试有什么建议吗 Entry.rb: #Load a library called entry.rb require_relative "entry.rb" class AddressBook attr_accessor :entries

我正在处理一项rails任务,该任务要求在模型中使用remove_entry方法,并对remove_entry进行工作测试。我考试不及格。有人对如何在addressbook.rb中定义remove_entry方法以及如何在entry_spec.rb中编写测试有什么建议吗

Entry.rb:

#Load a library called entry.rb
require_relative "entry.rb"

class AddressBook
  attr_accessor :entries

  def initialize
    @entries = []
  end

  def add_entry(name, phone, email)
    #Create a variable index to store
    index = 0
    @entries.each do |entry|
      if name < entry.name
        break
      end
      index += 1
    end

    @entries.insert(index,Entry.new(name,phone,email))
  end

  def remove_entry(entry)
    @entries.destroy(entry)
  end
end

我也有entry.rb和entry_spec.rb,但我相信它们会删除地址簿中的方法,对吗?因为正在从该模型中删除条目。如有任何澄清,将不胜感激

您是对的,
remove\u entry
方法应该在
AddressBook
中,因为它正在修改地址簿的
条目
集合(并且
entry
类不应该知道
AddressBook
或其内部内容)

但是,由于您的
add\u entry
方法没有公开
entry
类,因此您希望让
remove\u entry
以相同的方式工作,可能是通过电子邮件查找条目(应该是唯一的,而不是名称可能不唯一)。所以你可以这样做:

def remove_entry(email)
  @entries.delete_if {|entry| entry.email == email}
end
context ".remove_entry" do
  it "deletes one entry of the address book" do
    book = AddressBook.new
    book.add_entry('Ada Lovelace', '010.012.1815', 'augusta.king@lovelace.com')

    book.delete_entry('augusta.king@lovelace.com')
    expect(book.entries.size).to eq(0)
  end
end
要测试此方法,请执行以下操作:

def remove_entry(email)
  @entries.delete_if {|entry| entry.email == email}
end
context ".remove_entry" do
  it "deletes one entry of the address book" do
    book = AddressBook.new
    book.add_entry('Ada Lovelace', '010.012.1815', 'augusta.king@lovelace.com')

    book.delete_entry('augusta.king@lovelace.com')
    expect(book.entries.size).to eq(0)
  end
end