我有3个相关的表格/模型。我想检索已组织派对的用户,给定Party记录,带有布尔-DBOOST_ALL_DYN_LINK
列的连接表和用户表。
到目前为止我的最佳尝试(在很多摆弄之后,这个对我来说最有意义)。我省略了不相关的列。
organized
class Party
# party_id
has_many :parties_users
has_many :users, through: :parties_users, source: :user
has_one :organizer,
-> { where organizer: true },
through: :parties_users,
source: :user
class PartiesUser
# party_id
# user_id
# organized:bool
belongs_to :party
belongs_to :user
以上设置引发了以下错误,我真的不完全理解:
class User
# user_id
has_many : parties_users
我知道我可以通过实例方法做到这一点,但考虑到使用的频率类型,我的应用程序可以大大受益于将其作为关联。
答案 0 :(得分:5)
正如错误消息所示,你不能通过has_many获得has_one。
如果组织者标志位于联接记录中,您可以(相反)这样做...
has_many :parties_users
has_many :users, through: :parties_users, source: :user
has_one :main_party_user, -> {where organizer: true}, class_name: 'PartiesUser'
has_one :organizer, through: :main_party_user, class_name: 'User'