重构 rails 模型以从条件中删除字符串文字
Refactoring rails model to remove string literals from condition
我每次启动服务器时都会收到一条警告,提示我的条件中有字符串文字。这是什么意思,我该如何改进我的代码来解决这个问题并停止收到警告?
def partner_cars
if self.role == 'Garage Employee' || self.role == 'Garage Manager'
self.cars
elsif self.role == 'Company Employee' || 'Company Manager'
self.company.cars
else
nil
end
end
def partner_users
if self.role == 'Garage Employee' || self.role == 'Garage Manager'
allowed_users = self.users
elsif self.role == 'Company Employee' || 'Company Manager'
allowed_users = self.company.users
else
allowed_users = nil
end
allowed_users.uniq
end
任何有关如何重构此代码的帮助将不胜感激,谢谢!
在不了解您的数据结构的情况下,很难提出重构方法。
def partner_cars
if garage_roles.include?(self.role)
...some code
elsif employee_roles.include?(self.role)
..some code
end
end
private
def garage_roles
['Garage Employee', 'Garage Manager']
end
更好的方法是在您的角色模型中设置这些方法。
class Role
def works_for_garage?
title == 'Garage Manager' || 'Garage Employee'
end
end
错误来自行 elsif self.role == 'Company Employee' || 'Company Manager'
。相反,它应该是 elsif self.role == 'Company Employee' || self.role == 'Company Manager'
.
但是,我会重构您的代码以使用如下 case
语句:
def partner_cars
case role
when 'Garage Employee', 'Garage Manager' then cars
when 'Company Employee', 'Company Manager' then company.cars
end
end
def partner_users
allowed_users =
case role
when 'Garage Employee', 'Garage Manager' then users
when 'Company Employee', 'Company Manager' then company.users
end
allowed_users.try(:uniq)
end
我每次启动服务器时都会收到一条警告,提示我的条件中有字符串文字。这是什么意思,我该如何改进我的代码来解决这个问题并停止收到警告?
def partner_cars
if self.role == 'Garage Employee' || self.role == 'Garage Manager'
self.cars
elsif self.role == 'Company Employee' || 'Company Manager'
self.company.cars
else
nil
end
end
def partner_users
if self.role == 'Garage Employee' || self.role == 'Garage Manager'
allowed_users = self.users
elsif self.role == 'Company Employee' || 'Company Manager'
allowed_users = self.company.users
else
allowed_users = nil
end
allowed_users.uniq
end
任何有关如何重构此代码的帮助将不胜感激,谢谢!
在不了解您的数据结构的情况下,很难提出重构方法。
def partner_cars
if garage_roles.include?(self.role)
...some code
elsif employee_roles.include?(self.role)
..some code
end
end
private
def garage_roles
['Garage Employee', 'Garage Manager']
end
更好的方法是在您的角色模型中设置这些方法。
class Role
def works_for_garage?
title == 'Garage Manager' || 'Garage Employee'
end
end
错误来自行 elsif self.role == 'Company Employee' || 'Company Manager'
。相反,它应该是 elsif self.role == 'Company Employee' || self.role == 'Company Manager'
.
但是,我会重构您的代码以使用如下 case
语句:
def partner_cars
case role
when 'Garage Employee', 'Garage Manager' then cars
when 'Company Employee', 'Company Manager' then company.cars
end
end
def partner_users
allowed_users =
case role
when 'Garage Employee', 'Garage Manager' then users
when 'Company Employee', 'Company Manager' then company.users
end
allowed_users.try(:uniq)
end