Ruby on rails 我是否正确使用find_或create_by方法?

Ruby on rails 我是否正确使用find_或create_by方法?,ruby-on-rails,postgresql,database-design,Ruby On Rails,Postgresql,Database Design,我试图从现有数据库中填充一个新表,但我的方法似乎无法正常工作。下面是我的代码 class CreateEmployees < ActiveRecord::Migration def change create_table :employees do |t| t.string :first_name, null: false t.string :last_name, null: false t.string :email, null: false

我试图从现有数据库中填充一个新表,但我的方法似乎无法正常工作。下面是我的代码

class CreateEmployees < ActiveRecord::Migration
  def change
    create_table :employees do |t|
    t.string :first_name, null: false
    t.string :last_name, null: false
    t.string :email, null: false
    t.timestamps
  end
  Sale.find_each do |sale|
    unless Employee.exists?(sale.employee)
      puts "Employee #{sale.employee} created!"
    else
      puts "Employee #{sale.employee} already existed!"
    end
    employee_info = sale.employee.split
    Employee.find_or_create_by(first_name: employee_info[0],  last_name: employee_info[1], email:employee_info[2])
  end
end
end
class CreateEmployees
我有一个名为sales的主数据库,其中有一个包含employee的字段。在该字段中,您将找到一个字符串条目,如下所示:“Mary Higginshiggins@korning.com".
基本上,销售数据库包含四名不同的员工,但员工被多次列出。我要做的是创建四个唯一的行。我原以为上面的代码可以工作,但我的逻辑似乎出了问题。当我运行上面的代码时,它会遍历n行并创建Employee对象,因此,本质上,由于某种原因,除非语句永远不会返回true。问题可能在于。找到每种方法。每一个都够吗?我不知道我的数据库是否需要提供更多信息,但如果需要,我会提供更多细节

sale.employee是一个字符串,例如“Mary Higgins”higgins@korning.com"

存在吗?使用Employee.exists?(:email=>)等条件排除哈希higgins@korning.com"). 如果像这样传递字符串,首先,它会将字符串转换为整数,然后尝试查找id为0的记录,因此它总是返回false

我会像这样更改find_each循环:

 Sale.find_each do |sale|
    employee_info = sale.employee.split
    employee = Employee.find_or_create_by(first_name: employee_info[0],  last_name: employee_info[1], email:employee_info[2])
    if employee.new_record?
      puts "Employee #{sale.employee} created!"
    else
      puts "Employee #{sale.employee} already existed!"
    end
  end

您遇到了什么错误。感谢Rails粉丝的回答,结果是Employee.find\u或\u create\u by和除非逻辑完成了相同的任务,这就是我遇到问题的原因。