检查 Sinatra/DataMapper 中是否存在记录
Checking if a record exists in Sinatra/DataMapper
我目前使用用户的序列号生成用户的个人资料页面,如下所示:
get '/users/:id' do
@user = User.get(params[:id])
end
这很好用,直到输入了数据库中不存在的数字。
我知道如果找不到记录我可以将 User.get
更改为 User.get!
到 return 一个 ObjectNotFoundError
错误,但我不确定我如何使用它来帮助我。
以前用RoR的时候.exists?
有什么建议吗?
提前致谢!
编辑:我将不回答这个问题,因为我实际上还没有找到我在标题中提出的问题的解决方案;但是,我确实设法通过检查输入的 :id 是否高于数据库中存在的用户数量来解决我自己的问题,如下所示:
if params[:id].to_i > User.count
"This user does not exist."
else
@users_id = User.get(params[:id])
erb(:'users/id')
end
您已经有了正确的代码:
@user = User.get(params[:id])
如果不存在具有给定 ID 的用户,则 #get
将 return 为零。然后你可以做一个条件:
@user = User.get params[:id]
if @user
# user exists
else
# no user exists
end
这是 Ruby 中非常常见的模式,它利用了除 false
或 nil
之外的任何其他内容的 "truthiness"。也就是说,您可以说 if 0
或 if []
,条件将评估为真
您可以重新创建一个 .exists?
方法:
class User
def self.exists?(id_or_conditions)
if id_or_conditions.is_a? Integer
!! User.get id_or_conditions
else
!! User.first id_or_conditions
end
end
end
#get
类似于 rails 中的 #find
,只是如果找不到记录它不会引发错误。 #first
类似于rails中的#find_by
。
我目前使用用户的序列号生成用户的个人资料页面,如下所示:
get '/users/:id' do
@user = User.get(params[:id])
end
这很好用,直到输入了数据库中不存在的数字。
我知道如果找不到记录我可以将 User.get
更改为 User.get!
到 return 一个 ObjectNotFoundError
错误,但我不确定我如何使用它来帮助我。
以前用RoR的时候.exists?
有什么建议吗?
提前致谢!
编辑:我将不回答这个问题,因为我实际上还没有找到我在标题中提出的问题的解决方案;但是,我确实设法通过检查输入的 :id 是否高于数据库中存在的用户数量来解决我自己的问题,如下所示:
if params[:id].to_i > User.count
"This user does not exist."
else
@users_id = User.get(params[:id])
erb(:'users/id')
end
您已经有了正确的代码:
@user = User.get(params[:id])
如果不存在具有给定 ID 的用户,则 #get
将 return 为零。然后你可以做一个条件:
@user = User.get params[:id]
if @user
# user exists
else
# no user exists
end
这是 Ruby 中非常常见的模式,它利用了除 false
或 nil
之外的任何其他内容的 "truthiness"。也就是说,您可以说 if 0
或 if []
,条件将评估为真
您可以重新创建一个 .exists?
方法:
class User
def self.exists?(id_or_conditions)
if id_or_conditions.is_a? Integer
!! User.get id_or_conditions
else
!! User.first id_or_conditions
end
end
end
#get
类似于 rails 中的 #find
,只是如果找不到记录它不会引发错误。 #first
类似于rails中的#find_by
。