Rails OR条件在同一输入的内部

时间:2015-10-16 15:19:19

标签: ruby-on-rails

我有以下有效记录查询:

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的用户,而不是检查令牌字段。怎么避免这个?

1 个答案:

答案 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