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和除非逻辑完成了相同的任务,这就是我遇到问题的原因。