Rails发现在一对多关系中使用的位置

时间:2014-01-06 03:25:52

标签: ruby-on-rails activerecord

我的用户模型有很多"状态":

class User
    has_many states

class State
    belongs_to user

现在,我想通过每个用户查找具有该状态的所有用户...

state = State.last
# I want to get all the users where state appears in ANY user's user.states

User.where(state IN user.states.. ) 

任何建议都将不胜感激!

1 个答案:

答案 0 :(得分:1)

一种方法是使用联接来获取具有状态的用户:

User.joins(:states).where(state: 'some_type_of_state')

另一种方法是抓取具有特定状态的所有用户ID,然后查询这些用户:

user_ids = State.where(state: 'some_type_of_state').pluck(:user_id)
users = User.where(id: user_ids)

最后一个查询通常也不会执行。