我正在使用下面的代碼來upsert我的模型,它作業正常,但很冗長。我想通過使用find_or_create_by、create_with和可選鏈來縮短它,但它沒有達到預期效果。
誰能提供建議...
可以作業的詳細代碼 -
user_attr = {
first_name: 'Scarlett'/span>,
last_name: 'Johansson',
職業: 'Actress'。
地址: '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[/span
User.create!(user_attr)
結束 用戶.創建!
輸出:
# => #<用戶ID: 2, first_name: "Scarlett", last_name: "Johansson", profession: "女演員", 地址: "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'/span>, last_name: 'Johansson'/span>)
user.update! (profession: 'Actress', address: 'Los Angeles')
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/313831.html
標籤:
上一篇:用于比較專案的URL結構
