Инициализировать \ Создать «пользовательскую» структуру данных, которая отвечает на метод `где` - PullRequest
0 голосов
/ 24 июня 2011

Я использую Ruby on Rails 3.0.7, и я хотел бы знать, как инициализировать \ создавать "пользовательские" структуры данных, отвечающие методу where, как он работает, например, для общих объектов RoR AssociationCollection.

Например:

# The following code should work after build the 'test_data' as well... 
# but how to build that?

test_data.where(:test_attribute => 'test_value')

1 Ответ

1 голос
/ 24 июня 2011

Мне не совсем понятно, что вы ищете, но вы можете создать оболочку (например) для массива хешей, который использовал where для поиска.

class Search
  def initialize(data)
    @data = data
  end

  def where(filters={})
    @data.select do |item|
      filters.all?{|key, value| item[key] == value }
    end
  end
end



data = [
  { :name => 'Sam', :age => 27, :gender => 'M' },
  { :name => 'Sue', :age => 27, :gender => 'F' },
  { :name => 'Bob', :age => 32, :gender => 'M' }
]

search = Search.new(data)
search.where(:age => 27)      # returns array containing Sam and Sue hashes
search.where(:gender => 'M')  # returns array containing Sam and Bob hashes
search.where(:age => 27, :gender => 'M')  # returns array containing just Sam
...