在服务器为 运行 时更改 Rails 代码时,Trailblazer 操作中 class 的超级 class 不匹配错误

superclass mismatch error from class in Trailblazer operation when making changes to Rails code while server is running

我将 Trailblazer gem 与 Rails 一起使用,并且在我的一个 Trailblazer 操作中有一个 Cell class每当我用服务器 运行.

更改代码时,它就会开始抛出 superclass mismatch 错误

如果我启动服务器并立即开始浏览网站,一切运行正常。

但是,如果在启动服务器后随时更改一些代码,然后尝试加载站点上的页面,我会收到 superclass mismatch 错误。

原来我的操作名称与我为操作创建的文件的名称不同。我最近将文件名从 register.rb 更改为 make_reservation.rb,但没有将操作 class 名称从 Register 更改为 MakeReservation。当我也更改 class 名称时,superclass mismatch 错误停止发生。

如果您正在玩弄 Rails 5-pre 的 Trailblazer 书,您需要注意名称间距的变化。名称间距不正确导致了类似的错误。

虽然在Rails 4中,模型继承自ActiveRecord::Base,在Rails 5中它是形式ApplicationRecord

你的 app/concepts/thing/operation.rb 在我的例子中 app/concepts/listing/operation.rb 应该是...

class Listing < ApplicationRecord
  class Create < Trailblazer::Operation
    def process(params)
      @model = Listing.create(params[:listing])
    end
  end
end