嗨我正在尝试做一个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
答案 0 :(得分:1)
这是正常行为,如果您使用find_by_将返回nil,如果没有找到该属性的记录。另请注意,find_by_仅返回不是Enumerable的记录。你应该在哪里(...)或find_all_by_而不是
答案 1 :(得分:0)
通过id查找对象和按属性查找对象之间的区别是:
主要密钥查找方法(按ID)
@schedules = Schedule.find(<schedule_id>)
结果:如果找到则返回一个对象。如果找不到则会引发错误。
动态查找器方法(按任何属性)
在这种情况下,您可以通过查找对象的任何属性来找到对象。
@schedules = Schedule.find_by_team_id(<attribute_id>)
结果:如果找到则返回一个对象。如果找不到,则返回nil。
如果您不想抛出错误或只是想检查特定属性的对象是否存在,请使用动态查找器方法。