Ruby on rails ActiveRecord关联和作用域噢,天哪

Ruby on rails ActiveRecord关联和作用域噢,天哪,ruby-on-rails,ruby,activerecord,associations,scopes,Ruby On Rails,Ruby,Activerecord,Associations,Scopes,我试图弄清楚如何从多个表中提取数据并理解它 我有事件、事件和场馆表格 以下是迄今为止的模型/关联: models/event.rb: class Event < ActiveRecord::Base has_many :occurences, :dependent => :destroy belongs_to :price belongs_to :venue validates_presence_of :venue end class事件:销毁 属于:价格 属于:地点 验证

我试图弄清楚如何从多个表中提取数据并理解它

我有
事件
事件
场馆
表格

以下是迄今为止的模型/关联:

models/event.rb:

class Event < ActiveRecord::Base
 has_many :occurences, :dependent => :destroy
 belongs_to :price
 belongs_to :venue
 validates_presence_of :venue
end
class事件:销毁
属于:价格
属于:地点
验证是否存在:场馆
终止
型号/地点.rb:

class Venue < ActiveRecord::Base
 has_many :events, :dependent => :destroy
end
上课地点:销毁
终止
models/occurrence.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
类出现class事件:销毁
属于:价格
属于:地点
验证是否存在:场馆
经营范围:今天,lambda{
联接(:发生)。其中(“datetime\u start=?”,Time.now.end\u of\u day,Time.now)
}
终止
类事件:销毁
属于:价格
属于:地点
验证是否存在:场馆
经营范围:今天,lambda{
联接(:发生)。其中(“datetime\u start=?”,Time.now.end\u of\u day,Time.now)
}
终止

如果您希望语法像这样工作:

@events.today
然后,范围必须在
事件
模型中

如果您同意:

@event.occurences.today
那么你现在没事了,即:

@events = Event.all
@events.each do |ev|
   ev.occurences.today.each do |oc|
   end
end

如果希望语法的工作方式如下:

@events.today
然后,范围必须在
事件
模型中

如果您同意:

@event.occurences.today
那么你现在没事了,即:

@events = Event.all
@events.each do |ev|
   ev.occurences.today.each do |oc|
   end
end

在进一步测试后,我发现上述范围返回多个相同的事件(每个事件有多个匹配的事件)。即使有多个事件与范围匹配,我也希望只返回一次事件。如何实现此操作?示例:一个事件在一个月内有多个事件(例如10个)@events=Event.all输出将为该事件生成10个条目。您可以尝试将一个.select(“distinct
events
*”)链接到作用域的值。先生,您是一名专业人士。工作起来很有魅力。经过进一步测试,我发现上述作用域返回多个相同的事件(每个事件有多个匹配的事件)。即使有多个事件与作用域匹配,我也希望只返回一次事件。如何执行此操作?示例:一个事件在整个月内有多个事件(例如10次)@events=event.all输出将为该事件生成10个条目。您可以尝试链接a.select(“不同的
事件
*”)的范围的价值。先生,你是一个专业人士。工作就像一个符咒。