为什么我从 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.