2017-08-11 126 views
0

我想知道是否有更好的方法在rails中編寫這段代碼。如果條件失敗,則返回false

def self.get_user_id(name) 
    current_user_id = User.current.id 
    user_id = User.where("name=?",name).id 
    admin = check_admin(current_user_id) 

    if (admin == TRUE || user_id == current_user_id) 
     istrue = user_id 
    else 
     istrue = FALSE 
    end 

    return istrue 
end 

回答

0

你可以改進的東西很少。有價值的命名和返回值。更好的是,如果您可以返回您的成功案例中的特定user_id,如果不是,則返回nil。而且你也不需要在函數結尾處明確指出return。 Ruby有很多編碼標準,最好的做法是遵循一個好的編碼標準。所以它會堅持你以某種方式宣佈和定義事物。

def self.get_user_id(name) 
    current_user_id = User.current.id 
    user_id = User.where("name=?",name).id 
    admin = check_admin(current_user_id) 

    if (admin == TRUE || user_id == current_user_id) 
     return user_id 
    end 

    nil 
end 
0

寫它的更慣用的方法是這樣的:我改變了它返回用戶對象,而不是它的id

def self.get_user(name) 
    current_user = User.current 
    user = User.where("name = ?", name) 

    return nil unless user == current_user 
    return nil unless current_user.admin? 
    user 
end 

注意,這是不是圍繞通過ID最多時更好。此外,按照慣例,如果您想「無」或「無效」,最好返回nil而不是false

要採用這段代碼,還需要爲User實現一個名爲admin?的實例方法,該方法與您以前的check_admin方法基本相同。這使得你的代碼更加面向對象,這在Ruby中是更受歡迎的風格。

相關問題