此方法的目的是标记用户参加活动。您可以按如下方式阅读:如果今天有事件发生,如果用户存在,如果他的状态是订阅或确认,并且如果现有用户尚未签入,则将用户添加到事件的用户阵列。
有关更优雅解决方案的任何建议吗?
def mark_attendance(user)
if current_event(current_merchant)
if user
if user.status == 'subscribed' || user.status == 'confirmed'
if current_event(current_merchant).users.where(id: user.id) == []
current_event(current_merchant).users << user
end
end
end
end
答案 0 :(得分:0)
我可能会写这样的东西:
def mark_attendance(user)
event = current_event(current_merchant)
attending = ['subscribed', 'confirmed']
event.users << user if (event && user) &&
attending.include?(user.status) &&
event.users.where(id: user.id).any?
end
没有多少短缺,但更清晰的IMO。
答案 1 :(得分:0)
我的方法是:
def mark_attendance(user)
if !user
return
end
current_merchant_event = current_event(current_merchant)
if !current_merchant_event
return
end
if (user.status != 'subscribed' && user.status != 'confirmed')
return
end
if current_merchant_event.users.where(id: user.id) == []
current_merchant_event.users << user
end
但是,时间更长,执行效率更高,更容易确定进入“肉类”的必要条件。功能。
current_event只被调用一次,这也是louis所说的。
在原始代码中,无论用户如何,都会调用current_event函数,如果用户无效,则无需执行额外的代码执行。