【问题标题】:Active Record Associations in RailsRails 中的活动记录关联
【发布时间】:2015-06-03 13:18:32
【问题描述】:

我有一个模型 Persons::Names::Log 和另一个模型 Persons::Address。我想在LogAddress 之间创建一个关联。是否可以?我应该在两个模型文件中写什么语句?

Edit

我想要一个像Persons::Names::Log.last.address这样的关联

【问题讨论】:

    标签: ruby-on-rails activerecord associations model-associations


    【解决方案1】:

    来自http://guides.rubyonrails.org/association_basics.html#controlling-association-scope

    要将模型与不同命名空间中的模型关联,您必须 在关联声明中指定完整的类名。

    以下是与给定类名的关联示例:

    module Persons
      module Names
        class Log
          has_one :address, class_name: "Persons::Address"
        end
      end
    
      class Address
        belongs_to :log, class_name: "Persons::Names::Log"
      end
    end
    

    【讨论】:

    • 根据您的要求/类结构调整关联;主要是指定完整的类名。
    • 此外,您必须通过运行迁移来确保相关关联存在适当的数据库字段。迁移将特定于两个实体之间的关系。有关每个关系对应的迁移的详细信息,请参阅guides.rubyonrails.org/association_basics.html
    • 如果两个表中都没有公共字段,是否可以关联?
    【解决方案2】:

    用作用域指定类名:

        # app/persons/names/log.rb
        module Persons
          module Names
            class Log < ActiveRecord::Base
              has_one :address, class_name: "Persons::Address"
            end
          end
        end
    
       # app/persons/address.rb
        module Persons
          class Address < ActiveRecord::Base
            belongs_to :log, class_name: "Persons::Names::Log"
          end
        end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-10
      • 1970-01-01
      相关资源
      最近更新 更多