Ruby on rails 查找成员资格为false的用户

Ruby on rails 查找成员资格为false的用户,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一个用户表和一个帐户表。然后,我有一个account\u memberships表,该表是一个针对用户和帐户的have\u MUN TO表。我正在尝试使用当前的_帐户,并查找所有管理员等于false的用户。account_memberships表具有admin属性。有人知道如何质疑这一点吗 这是我的密码 当前方法。 这将返回undefined methodfind_by'for的错误#` 总而言之:帐户通过帐户成员身份拥有许多用户。对用户也是如此。account_成员身份的admin属性为布

我有一个用户表和一个帐户表。然后,我有一个account\u memberships表,该表是一个针对用户和帐户的have\u MUN TO表。我正在尝试使用当前的_帐户,并查找所有管理员等于false的用户。account_memberships表具有admin属性。有人知道如何质疑这一点吗

这是我的密码

当前方法。 这将返回
undefined method
find_by'for的错误#`

总而言之:帐户通过帐户成员身份拥有许多用户。对用户也是如此。account_成员身份的admin属性为布尔值。如何查找特定帐户中account_membership属性设置为false的所有用户?任何帮助都很好,谢谢

相反:

member.find_by(admin: false)
做:

相反:

member.find_by(admin: false)
做:

到目前为止,主要问题是:

member = u.account_memberships.find_by(account_id: self.id)
# returns instance of AccountMembership (not AR relation)

member.find_by(admin: false)
# find_by should not be called on instance of AccountMembership
基本上,您需要连接两个表,查询如下所示:

User.joins(:account_memberships)
    .where('account_memberships.admin': false, 
           'account_memberships.account_id': self.id)
到目前为止,主要问题是:

member = u.account_memberships.find_by(account_id: self.id)
# returns instance of AccountMembership (not AR relation)

member.find_by(admin: false)
# find_by should not be called on instance of AccountMembership
基本上,您需要连接两个表,查询如下所示:

User.joins(:account_memberships)
    .where('account_memberships.admin': false, 
           'account_memberships.account_id': self.id)

您使用的是SQL还是NoSQL?不建议在循环中运行查询,这将是大数据中昂贵且贪婪的资源。以下是我的一些解决方案:

SQL查询

membership_ids = User.joins(:account_memberships).
                      where('...  your users query ...').
                      where('account_memberships.admin' => false).
                      distinct('account_memberships.id')

account_memberships = AccountMembership.where("id IN (?)", membership_ids)
user_ids = User.where(...your users query...).distinct(:id)
account_memberships = AccountMembership.in(user_id: user_ids)
NoSQL查询

membership_ids = User.joins(:account_memberships).
                      where('...  your users query ...').
                      where('account_memberships.admin' => false).
                      distinct('account_memberships.id')

account_memberships = AccountMembership.where("id IN (?)", membership_ids)
user_ids = User.where(...your users query...).distinct(:id)
account_memberships = AccountMembership.in(user_id: user_ids)

您使用的是SQL还是NoSQL?不建议在循环中运行查询,这将是大数据中昂贵且贪婪的资源。以下是我的一些解决方案:

SQL查询

membership_ids = User.joins(:account_memberships).
                      where('...  your users query ...').
                      where('account_memberships.admin' => false).
                      distinct('account_memberships.id')

account_memberships = AccountMembership.where("id IN (?)", membership_ids)
user_ids = User.where(...your users query...).distinct(:id)
account_memberships = AccountMembership.in(user_id: user_ids)
NoSQL查询

membership_ids = User.joins(:account_memberships).
                      where('...  your users query ...').
                      where('account_memberships.admin' => false).
                      distinct('account_memberships.id')

account_memberships = AccountMembership.where("id IN (?)", membership_ids)
user_ids = User.where(...your users query...).distinct(:id)
account_memberships = AccountMembership.in(user_id: user_ids)

谢谢你的帮助。但它仍然说find_by_admin未定义。@按位,您是否检查了
成员
是否在此查询中有值
member=u.account\u memberships.find\u by(account\u id:self.id)
。如果
member
nil
yes,则会导致
find\u by
错误。会员拥有每个用户的帐户\u会员记录谢谢您的帮助。但它仍然说find_by_admin未定义。@按位,您是否检查了
成员
是否在此查询中有值
member=u.account\u memberships.find\u by(account\u id:self.id)
。如果
member
nil
yes,则会导致
find\u by
错误。会员拥有每个用户的帐户成员记录。我看到了。谢谢你的帮助。在我的情况下,我怎么称呼它?我应该做一个示波器吗?好的,我明白了。谢谢你的帮助。在我的情况下,我怎么称呼它?我应该做一个范围吗?可能的副本可能的副本