我有以下有效记录查询:
User.where(["id = ? OR token = ?", params[:id], params[:id]]).first
此处params[:id] = 9MrEflgr
问题
根据逻辑,params[:id]
可以是数字 id 或字母数字令牌。
我希望在where子句中获得类似User.find_by_id_or_token(params[:id])
的内容。
这里,由于params[:id]
以'9'开头,因此活动记录为我提供了id为9的用户,而不是检查令牌字段。怎么避免这个?
答案 0 :(得分:2)
如上所述,您需要检查参数是否为整数。这个SO question对如何执行此操作有很好的建议(您可以在下面实现is_integer?
)。
if params[:id].is_integer?
User.where(["id = ? OR token = ?", params[:id], params[:id]]).first
else
User.where(["token = ?", params[:id]]).first
end