【发布时间】:2019-02-23 22:56:24
【问题描述】:
我正在尝试在父子表中添加父母及其子女数据。我在这些表中有现有数据,我正在尝试添加更多数据,并且我不希望重复数据。下面是我用来上传数据的代码。孩子有parent_id。
父.rb
has_many :children, dependent: :destroy
def self.import(file)
CSV.foreach(file.path, headers:true) do |row|
parent = Parent.find_or_update_or_create_by(
parent_1_firstname: row['parent_1_firstname'],
parent_1_lastname: row['parent_1_lastname'],
address: row['address'],
address_line_2: row['address_line_2'],
city: row['city'],
province: row['province'],
postal_code: row['postal_code'],
telephone_number: row['telephone_number'],
email: row['email'],
family_situation: row['admin_notes'],
gross_income: row['gross_income'],
created_by_admin: row['created_by_admin'],
status: row['status']
)
parent.children.find_or_create_by(
firstname: row['firstname'],
lastname: row['lastname'],
dateofbirth: row['dateofbirth'],
gender: row['gender']
)
end
end
child.rb
belongs_to :parent
我面临的错误是当我选择下面要上传的 csv 文件时,我遇到了错误。
undefined method `find_or_update_or_create_by' for #<Class:0x00007f8797be74b0> Did you mean? find_or_create_by
我在下面添加了一个示例 csv。请帮我找出问题所在。
parent_1_firstname,parent_1_lastname,address,address_line_2,city,province,postal_code,telephone_number,email,admin_notes,gross_income, created_by_admin ,status,firstname,lastname,dateofbirth,gender
Nav,Deo,College Road,,Alliston,BC,N4c 6u9,500 000 0000,nav@prw.com,"HAPPY",13917, TRUE , Approved ,Sami,Kidane,2009-10-10,Male
【问题讨论】:
-
find_or_update_or_create_by定义在哪里? -
@jvillian 它在父模型中,如上所示。
-
请显示
Parent模型。具体来说find_or_update_or_create_by类方法的定义。 -
@jvillian 不是 Rails 中的这些内置类方法吗?我没有单独定义它们。
-
不,
find_or_update_or_create_by不是内置的类方法。这就是为什么您会收到undefined method错误(正如 Pavan 所指出的那样)。
标签: ruby-on-rails csv import ruby-on-rails-5