我有一个包含这些字段的模型:
Department:
name:string
deptid:integer
我已经运行rake db:migrate
并在表格中播放了5条记录。在部门控制器中,我有:
def show
@dept = Department.find(params[:deptid])
end
在show.html.erb中:
<%= @dept.name %>
在routes.rb
中get 'departments/:deptid' => 'departments#show'
当我这样做localhost:3000 / show / 2时,我得到第二条记录。如果我改为使用localhost:3000 / show / 212,其中deptid = 212有效,我得到一个
无法找到'id'= 212
的部门
错误。既然我已经指定了deptid而不是id(主键),为什么还要查找PK?
答案 0 :(得分:3)
find
方法将始终按主键查找记录 - 在这种情况下,您没有更改主键,因此它尝试按id
查找记录。
如果您想要按其他字段查找单个记录,可以使用find_by
(或find_by!
,区别在于find_by!
如果没有记录则会引发异常发现,就像find
那样。在这种情况下,您可能需要:
Department.find_by!(deptid: params[:deptid])