【Rails】有一个方法可以在rails控制台调用,但不能在测试代码和app上调用

问题描述 投票:0回答:1
  • 导轨 6.1.4.7
  • ruby 3.1.4p223(2023-03-30 修订版 957bb7cb81)[x86_64-linux]

代码

RegularEvent 的

holding_today?
方法调用 EventSchedule 模块(原始)。

  • 应用程序/模型/regular_event.rb
class RegularEvent < ApplicationRecord
  scope :holding, -> { where(finished: false) }

  def self.today_events
    holding.select(&:holding_today?)
  end

  def holding_today?
    schedule = EventSchedule.load(self) # EventSchedule is original module.
    schedule.held_next_event_date.to_date == Time.zone.today
  end
end

然后,EventSchedule 模块的

load
方法根据参数中事件对象的类动态创建一个实例。 在本例中,将创建 EventSchedule::RegularEventSchedule 的实例。

  • 应用程序/模型/event_schedule.rb
module EventSchedule
  def self.load(event)
    type = event.is_a?(Event) ? 'SpecialEvent' : event.class
    klass = "EventSchedule::#{type}Schedule".constantize
    klass.new(event)
  end
end
  • 应用程序/模型/event_schedule/regular_event_schedule.rb
module EventSchedule
  class RegularEventSchedule
    def initialize(event)
     ...
    end
  end
end

问题

当这些进程在应用程序上(或在测试代码中)执行时,会发生错误。

NameError: uninitialized constant EventSchedule::RegularEventSchedule

            candidate = constant.const_get(name)

为了调试,我在rails控制台中尝试了它,运行良好。

irb(main):001:0> RegularEvent.holding.select(&:holding_today?)
=>
[#<RegularEvent:0x00007fd4e0bf0a60
  id: 1,
  user_id: 1,
  title: "Event1",
  ...
  >,
 #<RegularEvent:0x00007fd4e0bf0a60
  id: 2,
  user_id: 2,
  title: "Event2",
  ...
  >,]

问题

为什么会出现这个错误?

holding_today?
的单元测试为绿色。

如果我遗漏任何信息,请告诉我。

ruby-on-rails ruby
1个回答
0
投票

抱歉,赛程有误。

© www.soinside.com 2019 - 2024. All rights reserved.