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

fengfans · February 11, 2018 · Last by fengfans replied at February 12, 2018 · 1163 hits

异常及代码如下:

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)

Reply to kikyous

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

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

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

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

You need to Sign in before reply, if you don't have an account, please Sign up first.