Предполагается, что у пользователя много событий, и каждое событие принадлежит пользователю.
scope :event_stream_for, lambda{ |user
joins(:events). # or joins("LEFT JOIN events ON events.user_id = users.id").
where(["target_type=?", "Event"])
}
это запустит один запрос.Не проверял мой код с вашей таблицей, но он должен работать аналогично.
----------------------- на основании вашего отредактированного вопроса-------------------
SELECT * ИЗ действий WHERE target_type == 'Event' И target_id IN (SELECT DISTINCT id ИЗ событий WHERE (host_id ==user.id ИЛИ пригласить_ид == user.id))
Это все о ActiveRecord Relation, http://railscasts.com/episodes/239-activerecord-relation-walkthrough?view=asciicast
Activity.
select("*,distinct events.id AS events_id").
joins("events ON (events.host_id = #{user.id} OR events.invitee_id = #{user.id}").
where(:target_type => 'Event')
Попробуйте это на консоли, и если это работает, вы можете просто изменитьэто к объему.Поскольку я не уверен в том, что вы пытаетесь сделать, вам может потребоваться некоторая корректировка.