我有一堆命名範圍,並且在其中一個範圍內有一個我希望在其他命名範圍之間共享的方法。我通過使用define_method和lambda完成了這項工作。但是,仍然有一些重複的代碼,我想知道是否有更好的方法?在指定範圍之間共享方法
下面是我得到的一個簡單的例子。假設我有一個項目表,每個項目都有很多用戶。
內的用戶模型我有...
filter_by_name = lambda { |name| detect {|user| user.name == name} }
named_scope :active, :conditions => {:active => true} do
define_method :filter_by_name, filter_by_name
end
named_scope :inactive, :conditions => {:active => false} do
define_method :filter_by_name, filter_by_name
end
named_scope :have_logged_in, :conditions => {:logged_in => true} do
define_method :filter_by_name, filter_by_name
end
然後我會使用它像...
active_users = Project.find(1).users.active
some_users = active_users.filter_by_name ["Pete", "Alan"]
other_users = active_users.filter_by_name "Rob"
logged_in_users = Project.find(1).users.logged_in
more_users = logged_in_users.filter_by_name "John"
我真的很喜歡你的方法。我忘記了你可以使用&方法傳遞一個塊。它完全按照我的需要工作,謝謝! –