如何关联两个与轨道没有直接关系的模型?

时间:2016-07-12 15:01:54

标签: ruby-on-rails activerecord associations rails-activerecord has-many-through

我有5个表/型号。这是结构。

1. application
id
name

2. profiles
id
name
app_id (Foreign key application table: id)

3. app_profiles
id
profile_id (Foreign key profile table: id)
app_id (Foreign key application table: id)

4. segments
id
app_id (Foreign key application table: id)

5. profile_segments
id
app_profile_id (Foreign key app_profile table: id)
segment_id (Foreign key segment table: id)

以下是我的协会:

application.rb中

  has_many :profiles, through: :app_profiles
  has_many :segments
  has_many :app_profiles

profile.rb

  has_many :applications, through: :app_profiles
  has_many :app_profiles

app_profile.rb

  belongs_to :profile
  belongs_to :application
  has_many :segments, through: :profile_segments
  has_many :profile_segments

segment.rb

  has_many :profiles, through: :app_profiles
  has_many :app_profiles, through: :profile_segments
  has_many :profile_segments
  belongs_to :application

profile_segment.rb

belongs_to :app_profile
belongs_to :segment

现在问题是我需要在profile和profile_segment之间建立关联。可以这样做吗?如果是这样的话?

先谢谢你帮助我!

1 个答案:

答案 0 :(得分:1)

profile.rb 中添加:

has_many :profile_segments, through: :app_profiles

Rails支持链式has_many through:语句。您的AppProfile模型已经has_many :profile_segmentsProfile has_many :app_profiles,因此您可以将它们链接起来。

当您执行ActiveRecord之类的操作时,INNER JOIN会执行2 profile.profile_segments秒。您可以在rails server的调试输出中看到完整的SQL语句。即使我不确定轨道究竟是如何完美的:D

我可以说,我不知道你想要实现什么,但你的结构非常复杂。尝试删除一些模型 - 可能将它们添加为其他模型中的某些列。

我必须让它来理解你的结构:

model dependency diagram

profile_segment通过2条路径属于application。绝对不是一件好事。也许它应该属于profile而不是app_profile