0

嗨,我正在尝试做一个 find_by_id,但是当调用此方法时,如果 id 不存在我得到 nil 类

if current_user.admin?
  @schedules = Schedule.all
elsif current_user.team_id?
  @schedules = Schedule.find_by_team_id(current_user[:team_id])
end

错误

计划中的 NoMethodError#index

显示 /Users/ /Sites/Rails/ * /app/views/schedules/index.html.haml 其中第 44 行提出:

nil:NilClass 的未定义方法 `each' 提取的源代码(第 44 行附近):

41:               %th Location
42:               %th{:style => "color: #675100;background: url(\"/img/sprites/alertboxes/bg-warning.png\") repeat-x #ffe68b;"} Manager
43:           %tbody
44:             - @schedules.each do |schedule|
45:               %tr
46:                 %td= event_display(schedule.event)
47:                 %td
4

2 回答 2

1

如果您使用 find_by_,这是正常行为,如果没有找到该属性的记录,则将返回 nil。另请注意,find_by_ 仅返回一条记录而不是 Enumerable。你应该 where(...) 或 find_all_by_ 代替

于 2012-07-15T10:37:10.210 回答
0

通过 id 查找对象和通过属性查找对象的区别在于:

  1. 主键查找方法(按 ID)

    @schedules = Schedule.find(<schedule_id>)

    结果:如果找到,则返回一个对象。如果未找到,则引发错误。

  2. 动态查找器方法(按任何属性)

    在这种情况下,您可以通过查找对象的任何属性来找到对象。

    @schedules = Schedule.find_by_team_id(<attribute_id>)

    结果:如果找到,则返回一个对象。如果没有找到则返回 nil。

如果您不想抛出错误或只想检查特定属性的对象是否存在,请使用动态查找器方法。

于 2013-09-13T16:08:07.900 回答