我正在使用照片控制器,现在突然某些用户无法查看他们的个人资料,并显示We're sorry, but something went wrong.
错误。
我一直在四处寻找,我不知道我做了什么导致这一点。我知道它读取undefined method state
,但用户都有一个属于州的邮政编码。所有的配置文件都在运行。我首先注意到这一点,因为我的个人资料显示错误。
用户模型:
belongs_to :location, :foreign_key => :zip_code, :primary_key => :zip_code
def similar
arr = User.where(:gender => self.gender).where.not(:id => self.id)
arr.select{|c| c.location.state == self.location.state }
end
def location
if Location.by_zip_code(self.zip_code.to_s).any?
return Location.by_zip_code(self.zip_code.to_s).first
else
return nil
end
end
用户控制器:
def show
@user = User.find_by(username: params[:id])
@similar_users = @user.similar.shuffle.first(8)
end
答案 0 :(得分:0)
从您的日志中,您可以看到您在某些内容上调用方法状态。
Jul 28 19:14:21 domain app / web.1:NoMethodError(未定义的方法state' for nil:NilClass):
Jul 28 19:14:21 domain app/web.1: app/models/user.rb:75:in
阻止类似'
7月28日19:14:21域名app / web.1:app / models / user.rb:75:在'相似'中
在您编辑的答案中,您可以看到罪魁祸首。你在其他陈述中返回nil。
def location
if Location.by_zip_code(self.zip_code.to_s).any?
# you can return all here if you want more than one
# for testing just returning the first one
return Location.by_zip_code(self.zip_code.to_s).first
else
return nil
end
end
但你不在这里检查nil(c.location.state)
def similar
arr = User.where(:gender => self.gender).where.not(:id => self.id)
arr.select{|c| c.location.state == self.location.state }
end
像我下面的东西可能会做到这一点
def similar
arr = User.where(:gender => self.gender).where.not(:id => self.id)
arr.select{ |c|
if !c.location.nil?
return c.location.state == self.location.state
else
return false
end
}
end
对于问题的其他部分,您可能在Location模型中出错。没有看到代码,我无法帮助你,但上述内容将帮助你的代码优雅地失败。