gpt4 book ai didi

mysql - 未定义方法 `+@' 为 nil :NilClass rails after moving to mysql

转载 作者:行者123 更新时间:2023-11-30 23:02:45 25 4
gpt4 key购买 nike

我将数据库移动到 VM 上的 mysql。移动数据库后,当我尝试访问或将数据保存到数据库时,我开始收到此错误,但某些模型更新工作正常。

我正在访问的模型有一些算术计算,我认为这是导致此问题的原因。

错误是

undefined method `+@' for nil:NilClass

我也从 rails console 尝试过,但我用这个命令遇到了同样的错误

设置.all

我猜这是那个方法方法的一部分

if params[:lat] and params[:lon] and params[:rad] and !params[:lat].empty? and
!params[:lon].empty? and !params[:rad].empty?

lat = params[:lat].to_f
lon = params[:lon].to_f
rad = params[:rad].to_f
ear = 6371.00

min_lat = (lat) - (rad/ear)/180.0*Math::PI;
max_lat = (lat) + (rad/ear)/180.0*Math::PI;

min_lon = (lon) - (rad/ear/Math.cos(lon*Math::PI/180.0))/180.0*Math::PI;
max_lon = (lon) + (rad/ear/Math.cos(lon*Math::PI/180.0))/180.0*Math::PI;

@settings = @settings.includes(:settings_location)
.where("settings_locations.latitude > :min_lat AND " \
"settings_locations.latitude < :max_lat AND " \
"settings_locations.longitude > :min_lon AND " \
"settings_locations.longitude < :max_lon", {
min_lat: min_lat,
max_lat: max_lat,
min_lon: min_lon,
max_lon: max_lon});

堆栈跟踪

Started POST "/settings.json" for 127.0.0.1 at 2014-04-24 13:52:53 +0200

NoMethodError - undefined method `+@' for nil:NilClass:
app/models/settings.rb:54:in `<top (required)>'
activesupport (4.0.2) lib/active_support/dependencies.rb:424:in `block in load_file'
activesupport (4.0.2) lib/active_support/dependencies.rb:616:in `new_constants_in'
activesupport (4.0.2) lib/active_support/dependencies.rb:423:in `load_file'
activesupport (4.0.2) lib/active_support/dependencies.rb:324:in `require_or_load'
activesupport (4.0.2) lib/active_support/dependencies.rb:463:in `load_missing_constant'

设置.rb:

class Settings < ActiveRecord::Base

has_one :settings_location

def to_builder
Jbuilder.new do |json|
json.location settings_location.to_builder
end
end //this line is 54

最佳答案

根据评论,似乎只有少数情况可以在 IRB 中重现相同的错误消息。第一个是:

foo, bar = nil, nil
foo.send("+@", bar) # undefined method `+@' for nil:NilClass

第二个是:

foo = nil
+foo # undefined method `+@' for nil:NilClass

eval 上下文中,后者可能更像:

foo, bar = nil, nil
eval("foo = +#{bar.inspect}") # undefined method `+@' for nil:NilClass

我个人的猜测是,您的问题与后者类似。不是使用 eval,而是使用其过多的 Ruby 变体之一,例如 define_method。实际的调用很可能在 Rail 内部的某个地方并且与一些未初始化的变量有关——也许 MySQL 正在返回 null 而 SQLite 正在返回 something 由于最近的架构更改你没有想到? p>

就我个人而言,我会尝试逐步缩小范围:

1.注释掉:

json.location settings_location.to_builder

如果错误消失了,那么:

2.a) 将其替换为:

builder = settings_location.to_builder
json.location builder

如果错误信息还是一样,那么:

2.b) 尝试

Jbuilder.new

…没有障碍。

重点是,您希望将范围缩小到导致错误的特定方法,然后深入研究该方法的代码以查看什么是 nil 和什么不应该是。 (也许该 block 缺少某种返回值?)

关于mysql - 未定义方法 `+@' 为 nil :NilClass rails after moving to mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23268562/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com