在我最新的rails应用中,我有3个模型 - Entries
,Politician
和Parties
。该应用程序只是为“政治家”添加“条目”。让我们假设一个条目有(条目name, date
)。政治家的政党被记录在会员资格模型中,我也记录了每个会员的时间范围。所以会员资格中的记录如下所示。
politician_id, party_id, date_from, date_to
模特
class Politician < ActiveRecord::Base
has_many :memberships
has_many :parties, :through => :memberships do
has_many :entries
end
class Party < ActiveRecord::Base
has_many :memberships
has_many :politicians, :through => :memberships
end
class Membership < ActiveRecord::Base
belongs_to :politician
belongs_to :party
end
现在假设我们在表格中有政治家ID 148,"148","My entry name", "2010-01-25"
的入境记录,我需要根据两者的日期为此条目找到该政客的成员资格表格。假设在成员资格表中我们有这些记录。我认为这是我必须在这里使用的范围吗?
politician_id | party_id | date_from | date_to
148 | 10 | 2012-01-22 | 2013-01-22
148 | 16 | 2010-01-21 | 2012-01-21
148 | 45 | 2009-01-19 | 2010-01-20
答案 0 :(得分:1)
我推荐这种方式,使用链式范围,它将为您工作,并在未来更灵活
向政治家添加范围,以便按名称查找;
scope :by_name, lambda{|name| name: name }
然后在您的会员模型中添加一个范围,以查找列出适合您范围的所有会员资格
scope :by_date, lamda{|x,y| where("date_from > ? and date_to < ?, x,y) }
这可以让你说出像
这样的内容Party.memeberships.by_date(YOURFROMDATE, YOURTODATE).by_name(YOURPOLITICIAN)
这有几种方法可以做到这一点,但我喜欢在未来重复使用的范围。虽然只有一个范围可以做到这一切“