1

在我最新的 Rails 应用程序中,我有这 3 个模型-Entries和. 该应用程序仅用于为“政治家”添加“条目”。让我们假设一个条目有(条目)。政治家的政党记录在会员模型中,我还记录了每个会员的时间范围。因此,成员资格中的记录如下所示。PoliticianPartiesname, 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

现在假设我们"148","My entry name", "2010-01-25"在表格中有政治家 id 148 的条目记录,我需要根据两个表格上的日期为该条目找到该政治家的党员身份。假设在成员资格表中我们有这些记录。我认为这是我必须在这里使用的范围?

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
4

1 回答 1

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)

这些是实现此目的的几种方法,但我喜欢在路上重用 illy 的 sere pare t 范围。虽然可能只有一个示波器可以完成所有工作”

于 2013-01-21T13:52:56.033 回答