如何使用关系rails在其他模型列上进行分组

时间:2017-09-14 12:13:27

标签: ruby-on-rails ruby ruby-on-rails-4 rails-activerecord

每张票都有2个时段。

ticket.rb:

has_many :timeslots, through: :visits

visit.rb:

has_many :tickets
belongs_to :timeslot

timeslot.rb:

has_many :visits
belongs_to :ticket

我需要得到的是2组中每张票的时段。所以

Ticket A - timeslot 1
Ticket A - timeslot 2
Ticket B - timeslot 1
Ticket B - timeslot 2

我正在尝试的查询是:

Ticket.where(:zone_id => 1).includes(:user).joins(timeslots:
 :visits).group_by("visits.ticket_id")

但它说:

ArgumentError: wrong number of arguments (1 for 0)

1 个答案:

答案 0 :(得分:0)

group_by是一种期待块的ruby方法(doc:https://ruby-doc.org/core-2.2.3/Enumerable.html#method-i-group_by

SQL GROUP BY由ActiveRecord的group方法提供(doc:http://guides.rubyonrails.org/active_record_querying.html#group

在您的情况下,这应该有效:

Ticket.where(:zone_id => 1)
      .includes(:user)
      .joins(timeslots: :visits)
      .group("visits.ticket_id")