我的端点操作采用字符串(源自短信)。
字符串可以包含:
示例:
我无法控制用户输入。由于成本因素,我接受了两种类型的字符串。
我有以下代码可以尝试提取徽章编号分数值或业务标记值。
def endpoints
if badge_number = get_badge_number(params[:text])
if score = get_score(params[:text])
//do something
end
elsif business_tag = get_business_tag(params[:text])
// do stuff
end
end
def get_badge_number(msg)
msg.find do |badge_number|
Employee.exists?(badge_number: badge_number.to_i)
end
end
def get_score(msg)
msg.find do |score|
(1..10).include? score.to_i
end
end
def get_business_tag(msg)
msg.find do |tag|
Business.exists?(tag: tag)
end
end
正如你所看到的,它变得有点混乱。
我真的需要帮助来有效地提取相关值。
答案 0 :(得分:1)
您可以尝试创建几个类来处理字符串上的不同类型的数据,如:
ScoreSearcher,BadgeNumberSearcher和BusinessTagSearcher
其中每个人使用正则表达式处理搜索并返回对象(如果存在或为零)。然后在您的端点上,您只需要使用您获得的参数调用此模型,并在需要时使用对象“执行您的操作”。
这仍然有点令人困惑,但正如@Dave Newton所提到的,在一个简单的代码中更难以反映复杂的东西,所以在我看来,小型模型中的单独的东西是更好的主意,因为它会让你用小东西做小事。它也更容易测试。 = d