gpt4 book ai didi

ruby-on-rails - 是吗? Rails 3 中的单表继承失败

转载 作者:数据小太阳 更新时间:2023-10-29 07:07:40 26 4
gpt4 key购买 nike

Object#is_a? 在 Rails 3 中以最奇怪的方式失败。我将单表继承设置如下(为简洁起见进行了简化):

# resource.rb
class Resource < ActiveRecord::Base
# blah blah
end

# video.rb
class Video < Resource
# blah blah
end

在我的 Controller 中,我有这个:

def create
@resource = Resource.find params[:resource_id]
logger.info '@resource class: ' + @resource.class.name
logger.info '@resource superclass: ' + @resource.class.superclass.name
logger.info '@resource is_a?(Video): ' + @resource.is_a?(Video).inspect
logger.info '@resource is_a?(Resource): ' + @resource.is_a?(Resource).inspect
logger.info '@resource is_a?(ActiveRecord::Base): ' + @resource.is_a (ActiveRecord::Base).inspect
# Do some other stuff
end

调用 #create 操作会生成这些日志结果:

@resource class: Video
@resource superclass: Resource
@resource is_a?(Video): true
@resource is_a?(Resource): false
@resource is_a?(ActiveRecord::Base): true

请注意,Video 实例一个ActiveRecord::Base,但它不是一个资源。这不仅仅是一个学术问题。从操作调用的框架代码使用 is_a? 检查类型不匹配,并在它认为 Video 不是 Resource 时引发。

然而在 Rails 控制台中,is_a?(Resource) 返回 true。

这里到底发生了什么?

最佳答案

解决方案显然是重新启动 Rails 服务器进程。我不知道这个错误是如何出现的,但它确实出现了。而且,它在多台计算机上多次发生。

因此,对于遇到此问题的任何其他人,只需重新启动您的服务器即可。不管是什么,它都是短暂的。

关于ruby-on-rails - 是吗? Rails 3 中的单表继承失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4382280/

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