【问题标题】:Rails belongs_to has_many relationship, main app and engineRails belongs_to has_many 关系,主应用和引擎
【发布时间】:2015-10-19 16:37:19
【问题描述】:

我正在使用一个名为 Monologue 的 Rails 博客引擎。我希望其中一个引擎模型与我的主要应用程序模型具有belongs_to 和has_many 关系。一个用户(作者)可以有很多帖子,一个帖子属于一个作者(用户模型)。我尝试在 class_name 中为模型命名空间,但它仍在引擎中搜索模型。

错误

NameError: uninitialized constant Monologue::Post::MyApp::User

post.rb

class Monologue::Post < ActiveRecord::Base
  belongs_to :author, :class_name => "MyApp::User", :foreign_key => "author_id"
end

user.rb

class User < ActiveRecord::Base
  has_many :posts, :class_name => "Monologue::Post", :foreign_key => "author_id"
end

架构

create_table "monologue_posts", force: true do |t|
  t.integer  "author_id"
end

我已经使用了:Creating a belongs_to relationship with a model from the main app from an engine model

【问题讨论】:

    标签: ruby-on-rails-4 activerecord foreign-key-relationship rails-models monologue


    【解决方案1】:

    NameError: 未初始化的常量 Monologue::Post::MyApp::User

    你需要把user.rb类名改成MyApp::User

    class MyApp::User < ActiveRecord::Base
      has_many :posts, :class_name => "Monologue::Post", :foreign_key => "author_id"
    end
    

    【讨论】:

    • 我是否必须将应用代码中的每个 User 实例调整为 MyApp::User?
    • @MicFin 你已经在user.rbMonologue::Post 中定义了类名,就像:class_name =&gt; "MyApp::User",所以你也需要更改user.rb 的类名
    • 重命名 User 类会破坏主动支持 /Users/Mike/.rvm/gems/ruby-2.1.5/gems/activesupport-4.1.1/lib/active_support/dependencies.rb:481:在 `load_missing_constant' 中:无法自动加载常量用户,需要 /Users/Shared/code/kindrdfood/RecRm/app/models/user.rb 来定义它(LoadError)
    • @MicFin 尝试将文件user.rb 也放入app/models/my_app
    • 我应该有两个 user.rb 副本?一个在 app/models/user.rb 中,一个在 app/models/my_app/user.rb 中?这似乎是太多的重复代码。
    猜你喜欢
    • 2014-10-23
    • 1970-01-01
    • 1970-01-01
    • 2021-05-20
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多