我有3个类定义为:
客户端
class Client < ActiveRecord::Base
belongs_to :provider
has_many :meeting_times
end
提供商
class Provider < ActiveRecord::Base
has_many :clients
has_many :meeting_times
end
MeetingTime
class MeetingTime < ActiveRecord::Base
belongs_to :meetingable, polymorphic: true
end
MeetingTime的每个实例都有一天,start_time和end_time。 有没有办法让我有效地计算
的交集client_instance1.meeting_times and provider_instance1.meeting_times
在我的种子文件中,我为客户端和提供者创建了meeting_times,如下所示
client_instance1.meeting_times.build(:day => "Friday", :start_time => time1, :end_time => time2)
client_instance1.meeting_times.build(:day => "Saturday", :start_time => time3, :end_time => time4)
client_instance1.save!
目前我尝试
client_instance1.meeting_times & provider_instance1.meeting_times
在种子文件中开发客户端和提供程序实例后,我得到一个空集,因为不同会议时间的ID不匹配(即使day,start_time和end_time相同)。 我该如何解决这个问题?我误会了什么吗?
答案 0 :(得分:0)
我相信你可以做到:
intersections = client_instance1.meeting_times.reduce([]) do |result, client_meeting|
intersects = provider_instance1.meeting_times.any? { |provider_meeting| provider_meeting.day == client_meeting.day && provider_meeting.start_time == client_meeting.start_time && provider_meeting.end_time == client_meeting.end_time }
result << obj if intersects
result
end
但请遵循这种方法,请注意,它只返回client_instance1
次会议,这些会议在provider_instance1
次会议中具有相同的日期/时间。
更聪明的方法 - 构建一个哈希,其中键将是字符串的校验和,如:"#{day}#{start_time}#{end_time}"
。
价值观 - 是来自客户和提供者会议的平等会议阵列。