ActiveRecord средство доступа к уровню коллекции - PullRequest
0 голосов
/ 23 декабря 2011

Учитывая модель Событие, которое

has_many :user_events

И модель UserEvent, которая

belongs_to :event

Я мог бы получить связанные user_events из одного объекта события, например:

event = Event.find(1)
user_events = event.user_events

Но есть ли эквивалентный метод доступа для коллекции событий? Например:

events = Event.where(:event_type => 'fun')
user_events = events.user_events

Который возвратил бы user_events, которые принадлежат любым 'забавным' событиям, используя что-то вроде.

SELECT user_events.* FROM user_events JOIN events on (events.id = user_events.event_id) where (events.event_type = 'fun');

1 Ответ

0 голосов
/ 23 декабря 2011

Нет, для коллекции событий нет средства доступа к отношениям.

Тем временем вы можете сделать:

events = Event.includes(:user_events).where(:event_type => 'fun')
user_events = events.map(&:user_events).flatten

user_events загружены благодаря includes(:user_events). Это обычно используется.

Мы используем ту же логику, когда делаем такие вещи (упрощенно):

# controller
@posts = Post.includes(:comments)

# view
<% @post.each do |post| %>
  # display your post
  <% post.comments.each do |comment| %>
    # display each comment
  <% end %>
<% end %>
...