Rails 3的作用域:has_many:通过关联



在我最新的rails应用程序中,我有这3个模型- Entries, PoliticianParties。简单地说,这款应用就是为"政客"添加"条目"。让我们假设条目有(条目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

我推荐这种方式,使用链式作用域,它将为您工作,并且更加灵活

为政治家添加一个作用域,通过名字查找;

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)

有几种方法可以做到这一点,但我喜欢在将来重用的范围更大。尽管有可能只用一个作用域就能完成所有工作"

相关内容

  • 没有找到相关文章

最新更新