这是我的问题。我正在为这个错误而苦恼
ActionView::Template::Error (undefined method `id' for nil:NilClass):
37: <ul class="dropdown">
38: <li><%= link_to 'Add Info', new_developer_developer_info_path(current_user.id) %></li>
39: <li><%= link_to 'Edit Profile', edit_developer_registration_path %></li>
40: <li><%= link_to 'Edit Info', edit_developer_developer_info_path(current_user.id, current_user.developer_info.id) %></li>
41: </ul>
42: </li>
43: <li><%= link_to 'Dashboard', developer_path(current_user) %></li>
开发者(用户)注册时,会将其重定向到个人资料页面,该页面上有导航栏(设计)。导航栏具有一个带编辑链接的下拉菜单。如果我的开发人员已经注册,那么我没有错误,因为我有current_user.developer_info.id
的ID,但是如果他还没有注册,那么我将收到错误undefined method 'id' for nil:NilClass
。
到目前为止,我在这里找到的解决方案是在适当的控制器中创建类@developer_info = DeveloperInfo.new
的实例,并将其@developer_info.id
传递给application.html.erb
。但是我必须使用哪个控制器?我在正确的方向上解决我的问题吗?我无权访问开发人员正在注册的devise
控制器。谢谢您的帮助。
答案 0 :(得分:3)
最简单的方法就是检查当前用户的developer_info并隐藏/显示链接。如果未注册用户,则无需进行任何编辑,因此无需显示任何内容。
<ul class="dropdown">
<li><%= link_to 'Add Info', new_developer_developer_info_path(current_user.id) %></li>
<li><%= link_to 'Edit Profile', edit_developer_registration_path %></li>
<% if current_user.developer_info %>
<li><%= link_to 'Edit Info', edit_developer_developer_info_path(current_user.id, current_user.developer_info.id) %></li>
<% end %>
</ul>