我一直在研究这个问题,但仍然没有快乐。这是我在这个一般范围内的第二个问题,因为最后一个问题太长了,现在这个问题已经定义得很明确了。
问题摘要:
我正在为我的客户加载一个页面,我收到错误:
undefined method 'name' for Nil:NilClass
我的代码
#Link on views/users/show.html.erb:
<%= link_to "Customer Account", :action => "home", :controller => "customers", :id => @user.user_type_id %>
#Regular Route:
map.connect 'customers/home/:id', :controller => 'customers', :action => 'home'
#Rake Routes, first entry:
/customers/home/:id :controller=>:"customers", :action=>"home"
#Customers Controller:
def home
render :layout => 'home'
@customer = Customer.find(params[:id])
@user = @current_user_session.user
flash[:error] = "Customer not found" and return unless @customer
@jobs = @customer.jobs
end
#views/customers/home.html.erb:
<%= @customer.name %>
我完全不知道为什么这个看似清晰的事件序列导致了NilClass。在控制台中搜索Customer.find(2)返回正确的客户。这个菜鸟缺少什么?非常感谢你。
答案 0 :(得分:3)
您在设置@customer
之前渲染视图,因此它是零。请尝试以下方法:
def home
@customer = Customer.find(params[:id])
@user = @current_user_session.user
flash[:error] = "Customer not found" and return unless @customer
@jobs = @customer.jobs
render :layout => 'home'
end