我正在试图弄清楚如何从多个表中提取数据并理解它。
我有events
,occurrences
和venues
表。
以下是目前的模型/协会:
模型/ event.rb:
class Event < ActiveRecord::Base
has_many :occurences, :dependent => :destroy
belongs_to :price
belongs_to :venue
validates_presence_of :venue
end
模型/ venue.rb:
class Venue < ActiveRecord::Base
has_many :events, :dependent => :destroy
end
模型/ occurence.rb:
class Occurence < ActiveRecord::Base
belongs_to :event
scope :today, lambda { where("occurence.datetime_start <= ? AND datetime_end >= ?", Time.now.end_of_day, Time.now) }
scope :this_week, lambda { where("occurence.datetime_start <= ? AND datetime_end <= ?", Time.now.end_of_day, Time.now.at_end_of_week) }
scope :next_week, lambda { where("occurence.datetime_start > ? AND datetime_end < ?", Time.now.at_end_of_week, Time.now.at_end_of_week + 1.weeks) }
scope :this_month, lambda { where("occurence.datetime_start <= ? AND datetime_end >= ?", Time.now.end_of_day, Time.now.at_end_of_month) }
scope :next_month, lambda { where("occurence.datetime_start >= ? AND datetime_end <= ?", Time.now.at_beginning_of_month + 1.months, Time.now.at_end_of_month + 1.months) }
end
我希望在我的观点/ events / index.html.erb中显示的是今天发生的所有事件的表格,我喜欢这样做:
<% @events.today.each do |event| %>
并显示与.today
范围匹配的所有事件。
我尝试将范围移到event
模型无济于事。我应该将范围移动到事件模型吗?到目前为止,我的搜索引导我
“Using scope to return results within multiple DateTime ranges in ActiveRecord”
和
“Multiple scope in rails 3.0”但我无法真正做出任何改变。
有人能指出我正确的方向吗?我应该在我的活动模型中创建一个新功能吗?
答案 0 :(得分:3)
class Event < ActiveRecord::Base
has_many :occurences, :dependent => :destroy
belongs_to :price
belongs_to :venue
validates_presence_of :venue
scope :today, lambda {
joins(:occurences).where("datetime_start <= ? AND datetime_end >= ?", Time.now.end_of_day, Time.now)
}
end
答案 1 :(得分:1)
如果您希望语法的工作方式如下:
@events.today
然后范围必须在Event
模型中。
如果你没问题:
@event.occurences.today
那时你现在好了,即:
@events = Event.all
@events.each do |ev|
ev.occurences.today.each do |oc|
end
end