这是我得到的错误:
Showing /home/ubuntu/workspace/UMUV/app/views/users/show.html.erb where line #6 >>raised:
undefined method `name' for nil:NilClass
这是我在users / show中的条件:
<% if @profile_info.present? %>
<%= @profile_info.region.name %>
<% else %>
<%= @user.email%>
<% end %>
这是在用户/控制器中:
def show
@user = User.find(params[:id])
@profile_info = Profile.find_or_initialize_by(user_id: params[:id])
end
我基本上想知道当我访问用户的个人资料页面时如何没有错误,并且用户尚未更新他们的个人资料。如果我通过“编辑页面”手动更新用户的个人资料,显示页面工作正常。
请帮助有条件。我也有一种感觉,我可以在user.rb或用户/控制器中创建方法,但真的不知道如何实现这个条件来做我想要的。
谢谢
答案 0 :(得分:2)
在您的节目页面中,您可以将其替换为:
var xml=new XMLHttpRequest();
var url="student.json";
var data=document.getElementById("demo");
xml.open("GET", url, true);
xml.send();
用这个:
<% if @profile_info.present? %>
<%= @profile_info.region.name %>
<% else %>
<%= @user.email%>
<% end %>
并通过这篇文章:http://everydayrails.com/2011/04/28/rails-try-method.html
答案 1 :(得分:1)
你总是可以使用new_record测试一个初始化对象与一个保存的对象吗? - 这将使您的上述视图看起来更像:
<% if @profile_info.new_record? %>
<%= @user.email%>
<% else %>
<%= @profile_info.region.name %>
<% end %>
您也可以在页面的某个部分利用try
,如果某个属性不存在,则会优雅地失败,例如
@profile_info.region.try(:name)
答案 2 :(得分:0)
由于您的错误名称@profile_info.region.name
不存在,您可以将条件更改为:
<% if @profile_info.region.name.present? %>
<%= @profile_info.region.name %>
<% else %>
<%= @user.email%>
<% end %>
或者如果你真的想测试@profile_info.present?
,你可以嵌套这样的条件:
<% if @profile_info.present? %>
<% if @profile_info.region.name.present? %>
<%= @profile_info.region.name %>
<% end %>
<% else %>
<%= @user.email%>
<% end %>
我希望有所帮助!