【发布时间】:2021-08-06 06:50:27
【问题描述】:
我正在构建一个 Ruby on Rails 6 应用程序,其中有一个模型 Archive 和另一个模型 ArchiveAgencies。在Archive 模型中,我必须有一个发送方代理和一个接收方代理,它们应该代表ArchiveAgencies。
在阅读 Rails 文档和一些 StackOverflow QA 之后:
- How do I add migration with multiple references to the same model in one table? Ruby/Rails
- Defining two references to the same column in another table
- Ruby on Rails: two references with different name to the same model
我想出了这种方法:
型号
class Archive < ActiveRecord::Base
belongs_to :sender_agency, class_name: ArchiveAgencies, foreign_key: "sender_agency_id"
belongs_to :receiver_agency, class_name: ArchiveAgencies, foreign_key: "receiver_agency_id"
end
class ArchiveAgency < ActiveRecord::Base
has_many :archives, inverse_of: 'sender_agency'
has_many :archives, inverse_of: 'receiver_agency'
end
迁移
class CreateArchiveAgencies < ActiveRecord::Migration[6.0]
def change
create_table :archives do |t|
t.string :name
t.timestamps
end
end
end
class CreateArchives < ActiveRecord::Migration[6.0]
def change
create_table :archives do |t|
t.references :sender_agency, foreign_key: { to_table: :archive_agencies }
t.references :receiver_agency, foreign_key: { to_table: :archive_agencies }
t.timestamps
end
end
end
对于这种情况,这是最好的方法吗?
在模型ArchiveAgency 中有两个inverse_of 语句会起作用吗?
【问题讨论】:
标签: ruby-on-rails database activerecord ruby-on-rails-6