рельсы, фильтрующие массив после выполнения поиска на столе - PullRequest
0 голосов
/ 06 февраля 2011

У меня есть метод в модели, который выглядит следующим образом:

def self.super_data
 self.find(:all,
      :select => 'name, type, ref_id, SUM(duration) as duration',
      :group => 'name, type, ref_id'
    )
end

, тогда я также хотел бы иметь метод

def self.filter_by_ref_id(filter_ref_id)
    self.select{ |l| l.ref_id == filter_ref_id}
  end

, поэтому я хотел бы сделать model.super_data.filter_by_ref_id(1) или что-то в этом роде, но кажется, что он больше не знает, какой это класс после первого метода, поэтому он не может вызвать второй.это правильно?что я могу сделать вместо этого?это лучший способ фильтрации данных в рельсах?спасибо!

Ответы [ 2 ]

2 голосов
/ 06 февраля 2011

редактировать: если вы в рельсах 3

scope :super_data, select("name, type, ref_id, SUM(duration) as duration").group("name, type, ref_id")
scope :filter_by_ref_id, lambda{ |id| where(:ref_id => id) }

Вы можете определить их как области действия:

named_scope :filter_ref_id, lambda { |filter_ref_id| :conditions => {:ref_id => filter_ref_id} }

Но я уже давно пользуюсь rails 3, и я не помню, как работают цепочки в рельсах 2 ...

1 голос
/ 06 февраля 2011

Вы пробовали проходить в условиях?

    def self.super_data(filter_ref_id)
 self.find(:all,
      :select => 'name, type, ref_id, SUM(duration) as duration',
      :group => 'name, type, ref_id',
      :conditions => 'ref_id = filter_ref_id'
    )
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...