为什么我从 Ruby 对象的成员那里得到一个 nil 值,而它不是 nil?
Why am I getting a nil value from a Ruby object's member, when it is not nil?
我想获取 Ruby ActivityChart 对象(图表)中字段 (ScenarioID) 的值。显示整个图表显示我想要的值:160.
问题是 chart.Scenario 产生了 nil 值。这可以通过两种方式重现:1) 通过在程序中引用 chart.Scenario,或者通过在调试器中打印 chart.Scenario。
图表对象:
#<ActivityChart
id: 1,
ChartName: "Pipe 304 Chart",
OverrideStartTime: nil,
OverrideStopTime: nil,
UseStartTime: false,
UseStopTime: false,
UseRecentSeconds: false,
created_at: "2020-02-21 17:39:13",
updated_at: "2020-03-02 16:17:22",
RecentSeconds: nil,
UseConcentrationCal: false,
PercentComplete: 100.0,
ShowOnDashboard: false,
ScenarioID: 160>
ScenarioID 显然不是 nil,但这就是我在程序和调试器中得到的:
(byebug) p chart.id
1
(byebug) p chart.PercentComplete
100.0
(byebug) p chart.ScenarioID
nil
我得到了其他成员的正确值,只有 ScenarioID 返回 nil。为什么会这样? (我只在 Ruby 编程了一个星期,所以这可能是一个明显的错误。)谢谢!
编辑:这是 class ScenarioID 出现在:
class ActivityChart < ApplicationRecord
attr_accessor :ScenarioID
validates :ChartName, presence: true, allow_blank: false
validates :ScenarioID, presence: true
validate :oneAndOnlyOne
def oneAndOnlyOne
if self.UseRecentSeconds && self.RecentSeconds == nil
errors.add(:RecentSeconds, 'can\'t be blank')
end
end
end
我已经解决了这个问题:chart.ScenarioID 是我在 C++ 中的做法,但在这里不起作用;它 returns 无。
在 Ruby 中,chart[:ScenarioID] 有效,并且正确 returns 160.
我想获取 Ruby ActivityChart 对象(图表)中字段 (ScenarioID) 的值。显示整个图表显示我想要的值:160.
问题是 chart.Scenario 产生了 nil 值。这可以通过两种方式重现:1) 通过在程序中引用 chart.Scenario,或者通过在调试器中打印 chart.Scenario。
图表对象:
#<ActivityChart
id: 1,
ChartName: "Pipe 304 Chart",
OverrideStartTime: nil,
OverrideStopTime: nil,
UseStartTime: false,
UseStopTime: false,
UseRecentSeconds: false,
created_at: "2020-02-21 17:39:13",
updated_at: "2020-03-02 16:17:22",
RecentSeconds: nil,
UseConcentrationCal: false,
PercentComplete: 100.0,
ShowOnDashboard: false,
ScenarioID: 160>
ScenarioID 显然不是 nil,但这就是我在程序和调试器中得到的:
(byebug) p chart.id
1
(byebug) p chart.PercentComplete
100.0
(byebug) p chart.ScenarioID
nil
我得到了其他成员的正确值,只有 ScenarioID 返回 nil。为什么会这样? (我只在 Ruby 编程了一个星期,所以这可能是一个明显的错误。)谢谢!
编辑:这是 class ScenarioID 出现在:
class ActivityChart < ApplicationRecord
attr_accessor :ScenarioID
validates :ChartName, presence: true, allow_blank: false
validates :ScenarioID, presence: true
validate :oneAndOnlyOne
def oneAndOnlyOne
if self.UseRecentSeconds && self.RecentSeconds == nil
errors.add(:RecentSeconds, 'can\'t be blank')
end
end
end
我已经解决了这个问题:chart.ScenarioID 是我在 C++ 中的做法,但在这里不起作用;它 returns 无。
在 Ruby 中,chart[:ScenarioID] 有效,并且正确 returns 160.