我有以下代碼:
user = User.from_google(from_google_params)
def from_google_params
@from_google_params ||= {
uid: auth.uid,
email: auth.info.email,
full_name: auth.info.name,
avatar_url: auth.info.image
}
end
...這里是散列傳遞到的 from_google 方法。
def self.from_google(email:, full_name:, uid:, avatar_url:)
當我運行這個時,我收到一個引數錯誤 ArgumentError (wrong number of arguments (given 1, expected 0; required keywords: email, full_name, uid, avatar_url)):
這是我在控制臺中看到的:
>> from_google_params.inspect
=> "{:uid=>\"100373362533979950619\", :email=>\"[email protected]\", :full_name=>\"Mark Locklear\", :avatar_url=>\"https://lh3.googleusercontent.com/a-/AOh14Gh1leKarrW8SCvxxwvaAcDkAISXYQ38k4xPQuC1Rg=s96-c\"}"
>> from_google_params.class
=> Hash
我怎樣才能使這項作業?
uj5u.com熱心網友回復:
使用雙 splat 運算子 (**) 將哈希轉換為關鍵字引數。
user = User.from_google(**from_google_params)
關鍵字和位置引數的分離在 Ruby 3 中是一個很大的變化。以前版本的 Ruby 會將最后一個位置引數強制轉換為關鍵字,如果它是一個散列 - 這種行為在 Ruby 2.7 中被棄用,并在 3.0 中完全洗掉。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/350224.html
上一篇:Rails5:棄用警告:您正在將ActiveRecord::Base的實體傳遞給`exists?`。..我不知道
