我在upsert我的模型中使用下面的代碼,它可以正常作業但很冗長。我想通過使用find_or_create_by,create_with和可選鏈接來縮短它,但它沒有按預期作業。
有人可以請教...
有效的詳細代碼 -
user_attr = {
first_name: 'Scarlett',
last_name: 'Johansson',
profession: 'Actress',
address: 'Los Angeles'
}
....
existing_user = User.find_by(first_name: user_attr.fetch(:first_name),
last_name: user_attr.fetch(:last_name))
if existing_user
existing_user.update!(user_attr)
else
User.create!(user_attr)
end
Output:
# => #<User id: 2, first_name: "Scarlett", last_name: "Johansson", profession: "Actress", address: "Los Angeles">
不回傳正確輸出的較短版本:
User
.create_with(user_attr)
.find_or_create_by(first_name: user_attr.fetch(:first_name),
last_name: user_attr.fetch(:last_name))
參考 - https://apidock.com/rails/v4.0.2/ActiveRecord/Relation/find_or_create_by
uj5u.com熱心網友回復:
你可以find_or_create_by先,然后update:
user = User.find_or_create_by!(first_name: 'Scarlett', last_name: 'Johansson')
user.update!(profession: 'Actress', address: 'Los Angeles')
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/416232.html
標籤:
上一篇:RSpec:我們可以配置一個期望回傳兩個不同的值嗎?我想測驗重試機制
下一篇:活動資??源軌未獲取資料
