如何在所有模型实例中获取所有has_many对象?

时间:2017-02-27 09:33:00

标签: ruby-on-rails rails-activerecord

我有Event模型。它has_many :participants

可以执行Event.all.each do |event|,然后尝试操纵event.participants

但是,是否有更简单的方法让所有参与者参加所有活动?

当您使用正确的方法获得“事件”数组而不是EventArray时,这是OO中的典型问题。

4 个答案:

答案 0 :(得分:2)

您可以Participants获得Event这样的<{1}}

Participant.where(event_id: Event.pluck(:id))

或只是

Participant.all

如果没有关联Participants

Event

答案 1 :(得分:1)

Participant.joins(:event)应该让你参加活动的所有参与者。

答案 2 :(得分:1)

MouseButtons _lastButtonUp = MouseButtons.None; private void ColorChanger_MouseUp(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { this.BackColor = Color.FromArgb(255, 0, 0); } if (e.Button == MouseButtons.Right) { this.BackColor = Color.FromArgb(0, 0, 255); } _lastButtonUp = e.Button; } private void ColorChanger_DoubleClick(object sender, EventArgs e) { switch (_lastButtonUp) { case System.Windows.Forms.MouseButtons.Left: this.BackColor = Color.FromArgb(255, 255, 0); break; case System.Windows.Forms.MouseButtons.Right: this.BackColor = Color.FromArgb(0, 255, 0); break; } } 这将为所有与活动相关的参与者提供

答案 3 :(得分:-1)

您可以在此问题中使用eager_loadgroup_by。在你的情况下

event = Event.eager_load(:participants).group_by(&:participants)

它将创建一个包含相关参与者的所有事件的哈希。您可以访问参与者的0索引和该事件的1个索引。像

这样的东西
event.first[0] = all the participants of that event
event.first[1] = that event