2014-01-06 3 views
0

У меня есть модель пользователя, которая имеет много «состояний»:Rails найти применение, где в одном для многих отношений

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

Один из способов заключается в использовании присоединиться, чтобы получить пользователя, которые имеют состояние:

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

Другой путь, захватывая все идентификатор пользователя, которые имеют определенное состояние, а затем запрос для пользователей:

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

Последний запрос обычно также не выполняется.

Смежные вопросы