ruby-on-rails - 脚本来更新rails中的字段
问题描述
我有一个包含父母及其子女数据的 csv 文件。父母有很多子女关联。我想要的是如果 family_situation/gross_income 或两者对于不同的孩子不同,我希望将该父母的最后一个 family_situation/gross_income 保存到数据库中。就像在下面的这种情况下,我希望family_situation 是“三口之家”,总收入是“16775”。我目前在我的父模型中拥有的内容如下。我怎样才能做到这一点,请帮忙。
父.rb
def self.import(file)
CSV.foreach(file.path, headers:true) do |row|
parent = Parent.find_or_create_by(
parent_1_firstname: row["parent_1_firstname"],
parent_1_lastname: row["parent_1_lastname"],
family_situation: row["family_situation"],
gross_income: row["gross_income"],
)
parent.children.find_or_create_by(
firstname: row["firstname"],
gender: row["gender"]
)
end
end
父.csv
parent_1_firstname,parent_1_lastname,family_situation,gross_income,childfirstname,childgender
Josh,Wilson,"family of two",13000,Jessica,Female
Josh,Wilson,"family of three",16775,Jamie,Male
解决方案
As you want to save only last value for family_situation and gross_income you can just find existing parent and update it:
parent = Parent.find_or_initialize_by(
parent_1_firstname: row["parent_1_firstname"],
parent_1_lastname: row["parent_1_lastname"]
).tap do |p|
p.family_situation = row["family_situation"]
p.gross_income = row["gross_income"]
p.save
end
Here you're trying to find a parent with particular first&last names. If it exists, it is instantiated, if not - it is builded with given names. After it you're assigning family_situation and gross_income and save the instance.
推荐阅读
- python - 将列表元素转换为单个字符串
- angular - 无法绑定到“routerlink”,因为它不是“a”的已知属性(Angular 11 + asp.net core5 + adminlte3)
- python - 为什么我们需要添加一个“sleep”的方法来让一个恒定时间攻击成功呢?
- caching - 具有多个键的 Solr DataImportHandler 缓存
- python - Python 中的 Selenium 错误 - 消息:没有这样的元素:无法找到元素
- jupyter-notebook - jupyter notebook 中的 local host : 8888 token 是什么意思?http://localhost:8888/?token=f----
- azure-synapse - 如何在 Synapse Analytics Workspace 中将一个工作区导入另一个工作区
- javascript - 使用 Express 在端口中显示某些内容时出错
- python - 如何正确调用此功能?(现在已经完全解决了我不再需要帮助)
- css - 未捕获的语法错误:意外的标记“。” CSS?