【问题标题】:Rails Associations with ModulesRails 与模块的关联
【发布时间】:2014-09-07 22:41:41
【问题描述】:

在使用 Rails 4.1 时,我似乎无法在使用模块时让我的 rails 关联工作。

我在 FG 模块中有对象:

module FG
  class Object < ActiveRecord::Base
    belongs_to :user

    has_one :email
    has_one :phone
  end
end

以及全球空间中的电子邮件:

class Email < ActiveRecord::Base
  belongs_to :object, class_name: 'FG::Object'
  has_many :objects, class_name: 'FG::Object'
end

当我尝试时

email.objects << object

我收到以下错误:

ActiveModel::MissingAttributeError 无法写入未知属性`object_id'

我是否在关联设置中遗漏了什么?

【问题讨论】:

  • 我认为不支持在模块内嵌套模型

标签: ruby-on-rails ruby activerecord


【解决方案1】:

您可以这样编写您的电子邮件代码:

class Email < ActiveRecord::Base
  has_many :objects, class_name: 'FG::Object', foreign_key: 'email_id'
end

这仅在您的对象表中有email_id 时才有效。您不能使用has_manybelongs_to 指代同一类。这意味着您在一个表中有一个object_id,在另一个表中有一个email_id

你也可以写:

class Email < ActiveRecord::Base
  belongs_to :object, class_name: 'FG::Object', foreign_key: 'object_id'
end

这取决于您的数据库结构。

【讨论】:

    【解决方案2】:

    我以一种矛盾的方式思考这些关系。

    为了使关联有意义,我需要按以下方式组织它们:

    module FG
      class Object < ActiveRecord::Base
        belongs_to :user
    
        belongs_to :email
        belongs_to :phone
      end
    end
    
    class Email < ActiveRecord::Base
      has_many :objects, class_name: 'FG::Object'
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-24
      • 1970-01-01
      • 1970-01-01
      • 2011-01-30
      • 2018-01-05
      • 1970-01-01
      相关资源
      最近更新 更多