Ruby on rails RubyonRails中的自定义getter

Ruby on rails RubyonRails中的自定义getter,ruby-on-rails,getter,Ruby On Rails,Getter,我有一个邮件列表模型,它可能是:人 对于我的大多数应用程序,我只想让人们是活跃的 所以@mailling_list.人员应该只返回活动人员 在我的模型中,我做不到 def people self.people.find_all{ |p| !p.activated_at.nil? } end 因为它一直在呼唤自己。ruby/rails是如何自动过滤用户的。另一个可能的问题是,我认为self.people返回一个活动记录对象数组,self.people.find\u all…将返回一个数组。这

我有一个邮件列表模型,它可能是:人

对于我的大多数应用程序,我只想让人们是活跃的

所以
@mailling_list.人员
应该只返回活动人员

在我的模型中,我做不到

def people
  self.people.find_all{ |p| !p.activated_at.nil? }
end
因为它一直在呼唤自己。ruby/rails是如何自动过滤用户的。另一个可能的问题是,我认为self.people返回一个活动记录对象数组,
self.people.find\u all…
将返回一个数组。这将导致我的一些代码中断。这很容易修复,但有没有办法返回活动记录对象?如果有这个选择就好了


谢谢

您可以使用标准查找方法或动态查找器。您的发现可能如下所示:

people.find(:all,:conditions=>“activated_at=nil”) 或 people.find_all(:conditions=>“activated_at=nil”)

此文件的动态版本可能为:


人员。在(无)处通过激活查找您也可以在关联级别进行筛选

has_many :people, :conditions => {:activated => true} 

这是命名范围的完美示例:

class Person < ActiveRecord::Base
  named_scope :active, :conditions => 'activated_at is not null'
end

您也可以链接命名范围。如果您创建了一个名为:recent的,仅选择上周创建的用户,那么您可以调用Person.active.recent来获取所有最近激活的人。这里有2个问题。一个是我想在一个实例上调用它,比如@mailling_list.people。另一个是,我不想说“.active”,因为我总是要求积极的人。话虽如此,当我想查看非活动用户(如管理员界面上的用户)不确定显式调用Person.active有什么问题时,必须有一种方法来覆盖该限制,但您的另一个选项是使用默认的\u范围:conditions=>“activated\u at is Not null”。然后你可以做Person.all,只做活动。就我个人而言,我认为这不是一个好主意。问题是我只想要属于邮件列表的人。Person.active将得到所有活跃的人。我需要邮寄名单。我想这是我在两种情况下寻找的。首先,我希望能够在必要时覆盖过滤器。第二个是,我需要检查“activated_at”是否为“notnull”,因此需要有一种方法来做到这一点。谢谢好的,我能够完成is“notnull”要求。剩下的唯一问题是如何跳过过滤器?
# equivalent to Person.find(:all, :conditions => 'activated_at is not null')
@active_people = Person.active