2

has_may:peopleのMailingListモデルがあります

私のアプリケーションのほとんどでは、アクティブな人だけを取得したいです

したがって@mailing_list.people、アクティブな人だけを返す必要があります

私のモデルでは、私はできません

def people
  self.people.find_all{ |p| !p.activated_at.nil? }
end

それは自分自身を呼び続けるからです。人々を自動的にフィルタリングするRuby/Railsの方法は何ですか。もう1つの考えられる問題は、self.peopleがアクティブレコードオブジェクトの配列を返し、そこに配列が返されると思うことですself.people.find_all...。これにより、コードの一部が破損します。簡単に修正できますが、アクティブなレコードオブジェクトを返す方法はありますか?オプションがあるといいでしょう。

ありがとう!

4

3 に答える 3

6

これは、名前付きスコープの完璧な例です。

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

次に、それを呼び出します。

# equivalent to Person.find(:all, :conditions => 'activated_at is not null')
@active_people = Person.active 
于 2009-10-15T00:17:49.137 に答える
4

関連レベルでフィルタリングすることもできます。

has_many :people, :conditions => {:activated => true} 
于 2009-10-14T23:28:36.900 に答える
0

標準の find メソッドまたは動的ファインダーを使用できます。あなたの検索結果は次のようになります。

people.find(:all, :conditions => "activated_at = nil") または people.find_all(:conditions => "activated_at = nil")

これの動的バージョンは次のようになります。

people.find_by_activated_at(nil)

于 2009-10-14T23:05:24.040 に答える