has_one通过与条件的关联

时间:2018-03-19 15:20:29

标签: ruby-on-rails activerecord ruby-on-rails-5 rails-activerecord

我有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

我知道我可以通过实例方法做到这一点,但考虑到使用的频率类型,我的应用程序可以大大受益于将其作为关联。

1 个答案:

答案 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'