所以我有一个用于音乐活动的Rails应用程序。我有3个主要表格,场地,事件,流派
一个地点可以举办许多活动
一个活动可以有多种流派
一个活动有一个场地
一个流派可以举办许多活动
在事件部分中,显示类型是一个简单的查询,非常简单。 但是,在“场地”部分,我希望显示今晚发生的事件的类型。
所以我添加了一个虚拟关联和一个has_many
has_many :genres, :through => :todays_events
has_many :todays_events, -> {order(:start_time).where(start_time: Time.zone.now.beginning_of_day..Time.zone.now.end_of_day) }, class_name: 'Event'
这符合我的目的,但是我不相信这是一个最佳解决方案。有没有更好的最佳方法来达到相同的结果?
答案 0 :(得分:1)
我更喜欢将“今天的事件”逻辑作为Event
模型的一部分,因为我喜欢将我的代码隔离到我认为它们应该属于的位置,因此我将这样做:
class Event
belongs_to :venue
scope :today, -> {
where(start_time: Time.zone.now.beginning_of_day..Time.zone.now.end_of_day).order(:start_time)
}
end
class Venue
has_many :events
end
rails控制台:
venue = Venue.first
events_today = Venue.first.events.today
# or when using as part of the query
available_venues = Venue.where(is_available: true)
available_venues_that_have_events_today = available_venues.joins(:events).where(events: { id: Event.today })
class Event
belongs_to event
scope :today, -> {
where(start_time: Time.zone.now.beginning_of_day..Time.zone.now.end_of_day)
}
end
class Venue
has_many :events
has_many :events_today, -> { today }, class_name: Event.to_s
end
venue = Venue.first
events_today = Venue.first.events_today
# or when using as part of the query
available_venues = Venue.where(is_available: true)
available_venues_that_have_events_today = available_venues.joins(:events_today)