有了活跃的记录,我相信在致电时会有所不同:
User.find(23)
与
User.where("...")
如果是第一种情况,这是否足以对未找到的记录进行抨击?
u = User.find(234)
if u
# assume record found??
end
或者我应该检查是否为零?和/或坚持?
在带有where子句的第二种情况下,我理解我会收回一个集合,如果没有找到则会得到一个空数组:
users = User.where("...")
if users.blank?
# assuming at least 1 user model in the collection
end
这是正确的还是有更好的方法?
现在有了常规的ruby集合,你必须在分配之前检查nils:
first_item = some_collection[0] unless some_collection.nil? || some_collection.empty?
# or I can use blank?
对于红宝石和活跃记录中的收藏,这基本上是关于防止nils的所有知识吗?
答案 0 :(得分:2)
User.find(23)
将引发ActiveRecord::RecordNotFound
。如果您希望获得nil,则可以使用User.find_by_id(23)
。
正确。还有其他方法,例如在关系上调用#empty?
或#count
,但它们基本相同。
要从现有但可能为空的集合中获取第一个项目,您可以执行以下操作:
first_item = some_collection.first
如果some_collection为空,将返回nil。这与您的示例有些不同,后者将检查nil集合,如果some_collection为nil或为空,则不会更改first_item。但这是一个不太常见的用例。 (另外,是的,当在空集合上调用时,Rails #blank?
方法将返回true。)
答案 1 :(得分:0)
您可以捕获未找到的错误并处理它:
begin
foo = Foo.find(params[:id])
rescue ActiveRecord::RecordNotFound
redirect_to somewhere_else_url
end