find_by_id返回零级

时间:2012-07-15 09:46:55

标签: ruby-on-rails if-statement controller null

嗨我正在尝试做一个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 提取的来源(第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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

通过id查找对象和按属性查找对象之间的区别是:

  1. 主要密钥查找方法(按ID)

    @schedules = Schedule.find(<schedule_id>)

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

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

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

    @schedules = Schedule.find_by_team_id(<attribute_id>)

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

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

相关问题