2017-09-16 27 views
0

在我的Rails應用程序我想通過他們的電子郵件找到一個用戶,或者如果用戶不存在,創建一個與該電子郵件以及一些其他屬性。有沒有比下面的代碼更笨拙的方式來做到這一點,也許使用find_or_create_by執行find_or_create_by時發現涉及單個屬性,但創建涉及多個屬性

def set_user 
    if self.user = User.find_by(email: recipient) 
    else 
    self.user = User.create(email: recipient, 
         password: Devise.friendly_token.first(6), 
         confirmed_at: DateTime.now) 
    end 
end 

回答

1

find_or_create_by需要將應用塊只有在創造。它會根據您提供的屬性查找記錄,如果找不到任何記錄,將使用您指定的塊屬性創建一條記錄。

在你的情況下,這看起來像:

user = User.find_or_create_by(email: recipient) do |user| 
    user.password: Devise.friendly_token.first(6), 
    user.confirmed_at: DateTime.now 
end 
0
def set_user 
    user = User.find_or_initialize_by(email: recipient) 
    user.update(password: Devise.friendly_token.first(6), 
       confirmed_at: DateTime.now) if user.new_record? 
    user 
end 
0

總能找到用戶,詢問你的搜索存在或find方法返回nil,如果它返回nil然後創建一個用戶

def set_user 
user = User.find_by(email: recipient) 
unless user 
user = User.create(email: recipient, 
        password: Devise.friendly_token.first(6), 
        confirmed_at: DateTime.now) 
end