新手问题 根据 ID,查找后没有记录如何处理?

fengfans · 2018年02月11日 · 最后由 fengfans 回复于 2018年02月12日 · 1181 次阅读

异常及代码如下:

ActiveRecord::RecordNotFound in SportsController#show
Couldn't find Sport with 'id'=7

Extracted source (around line #23):
21
22
23
24
25
26

  def show

       @sport = Sport.find_by_id(params[:id])
       if @sport.blank?
        @a = Activity.find(params[:id])
        @sport = Sport.find(@a.sport_id)

我想实现这样的功能: 如果查询的 ID 存在,即继续后面的查询。 否则,执行以下代码

@a = Activity.find(params[:id])
        @sport = Sport.find(@a.sport_id)

再继续后面的查询。

请大家指教,用什么方法实现

用 where(id: id)

kikyous 回复

一样的,我的想法是遇到没有记录的错误后,不显示错误,直接更换条件重新查询。

find 会抛出异常,你使用 find_by(id: xxx) 然后再检查返回是不是空

你的 show 方法第一句代码就用了 find_by_id,为什么下面就不继续用 find_by_id

@sport = Sport.find_by_id(params[:id]) @activities = @sport.activities 最后这样修改就成功了,异常没有再出现。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号