Как повторно использовать именованные области?

Привет, у меня есть named_scope в моей модели User следующим образом.

named_scope :by_gender, lamdba { |gender| { :conditions => { :gender => gender } } }

Я хочу создать две другие именованные области, которые повторно используют эту, например,

named_scope :male,   lambda { by_gender('male') }
named_scope :female, lambda { by_gender('female') }

Любая идея, что делать?


person Waseem    schedule 26.10.2009    source источник


Ответы (1)


Вы можете предоставить методы класса, которые выполняют аппаратную передачу аргументов:

def self.male
    by_gender('male')
end

def self.female
    by_gender('female')
end

или, поскольку named_scope, который вы используете, настолько прост, что вы можете вырезать область by_gender и просто использовать:

named_scope :male, :conditions => {:gender => 'male'}
named_scope :female, :conditions => {:gender => 'female'}

Второй вариант, конечно, зависит от того, где вы на самом деле не требуете явной области видимости by_gender где-либо еще.

person workmad3    schedule 26.10.2009
comment
Хммм, предоставление методов класса имеет смысл. Он вернет прокси-ассоциацию, чтобы я мог даже связать их вместе. Спасибо. - person Waseem; 26.10.2009