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中是更受欢迎的风格。

相关问题