声明同一模型两次 - Rails

Declare the same model twice - Rails

所以,我有两个模型,出于某些目的,我试图对每个模型声明两次。 由于某种原因,第二个模型无法再次声明,当我在 运行 这一行 - Foo2.first.bar2 时,我收到错误消息:undefined method 'bar2'

第一个模型,但是运行完美:Foo1.first.bar1

任何帮助将不胜感激。 谢谢, 大卫

我的模型看起来像:

在我的 appname/app/models/foo1.rb:

class Foo1 < ActiveRecord::Base
    def bar1
        puts 'bar'
    end
end

在我的 appname/app/models/foo2.rb:

class Foo2 < ActiveRecord::Base
    def bar2
        puts 'bar2'
    end
end

在我的 appname/config/initializers/main.rb 中:

require "main_classes"

在我的 appname/lib/main_classes.rb 中:

class Foo1 < ActiveRecord::Base
    attr_accessible :foo1_name
end

class Foo2 < ActiveRecord::Base
    attr_accessible :foo2_name
end

当我删除所需的行时,它运行完美.. 为什么?

/==========更新=============/

我有 3 个 table:表、列、函数。

在表中我有 table 名称,在列中有列名称、类型等。在 Funcs 中有表功能。

appname/app/func.rb中的代码:

class Func < ActiveRecord::Base
    def foo
        puts 'bar'
    end
end

appname/config/initializers/main.rb中:

require "main_classes"

appname/lib/main_classes.rb中:

Table.find_each do |t|
    t.columns.where(accessible: true).find_each do |c|
        eval "class #{t.name.classify} < ActiveRecord::Base ;          attr_accessible :#{c.name.to_sym} ; end ;"
    end
end

代码Func.first.foo提高undefined method 'bar'

当我删除所需的行时,它运行完美.. 为什么?

When I remove the required line, it runs perfectly .. why ?

正如我在评论中提到的,答案是 - rails 自动加载机制。

当您引用 class(在您的情况下为 Func)时,会发生以下两种情况之一:

  • 如果class加载了这样的名称,则返回
  • 如果未加载,rails 会尝试通过在其 $LOAD_PATH 目录中查找 func.rb 来找到它。如果仍未在那里找到,则会引发 LoadError

在您的例子中,Func 是在应用程序启动时定义的(当初始化程序 运行 时)。因此,当您稍后执行 Func.first.foo 时,将返回带有几个 attr_accessible 的普通 Func。您的 app/models/func.rb 永远不会被评估

可能的解决方案:配置 classes (http://guides.rubyonrails.org/configuring.html) 的预先加载。