我有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之间建立关联。可以这样做吗?如果是这样的话?
先谢谢你帮助我!
答案 0 :(得分:1)
在 profile.rb 中添加:
has_many :profile_segments, through: :app_profiles
Rails支持链式has_many through:
语句。您的AppProfile
模型已经has_many :profile_segments
和Profile
has_many :app_profiles
,因此您可以将它们链接起来。
当您执行ActiveRecord
之类的操作时,INNER JOIN
会执行2 profile.profile_segments
秒。您可以在rails server
的调试输出中看到完整的SQL语句。即使我不确定轨道究竟是如何完美的:D
我可以说,我不知道你想要实现什么,但你的结构非常复杂。尝试删除一些模型 - 可能将它们添加为其他模型中的某些列。
我必须让它来理解你的结构:
profile_segment
通过2条路径属于application
。绝对不是一件好事。也许它应该属于profile
而不是app_profile